如何在react render函数中异步等待?

生产

我对async await后端非常熟悉nodejs但是我遇到了一种情况,我必须在前端使用它。

我正在获取对象的数组,并且在那些对象中我获取lat lng了位置。现在,react-geocode我可以获取单个地点名称,lat lng但是我想在map函数中使用该名称来获取地点名称。因此,正如我们所知道的那样,async我必须async await在那边使用

这是代码

import Geocode from "react-geocode";
render = async() => {
  const {
    phase,
    getCompanyUserRidesData
  } = this.props   
                      
  return (
    <div>
       <tbody>                   
        await Promise.all(_.get(this.props, 'getCompanyUserRidesData', []).map(async(userRides,index) => {
          const address = await Geocode.fromLatLng(22.685131,75.873468)
          console.log(address.results[0].formatted_address)                         
         return ( 
          <tr key={index}>
            <td>
            {address.results[0].formatted_address}
            </td>
            <td>Goa</td>
            <td>asdsad</td>
            <td>{_.get(userRides,'driverId.email', '')}</td>
            <td>{_.get(userRides,'driverId.mobile', '')}</td>
          </tr>
        )
        }))
      </tbody>
    </div>
  )
}

但是,当我在此处将异步函数与map函数一起使用时,它不会返回任何内容。谁能帮我解决我的问题?

杰瑞德·史密斯(Jared Smith)

您应该始终将获取数据等关注事项与显示数据等关注事项分开。这里有一个父组件,该组件通过AJAX提取数据,然后在输入数据时有条件地呈现纯功能子组件。

class ParentThatFetches extends React.Component {
  constructor () {
    this.state = {};
  }

  componentDidMount () {
    fetch('/some/async/data')
      .then(resp => resp.json())
      .then(data => this.setState({data}));
  }

  render () {
    {this.state.data && (
      <Child data={this.state.data} />
    )}
  }
}

const Child = ({data}) => (
  <tr>
    {data.map((x, i) => (<td key={i}>{x}</td>))}
  </tr>
);

我实际上并没有运行它,因此它们可能是一些小错误,并且如果您的数据记录具有唯一的ID,则应将其用于key属性而不是数组索引,但是您会发现jist。

更新

同样的事情,但是使用钩子更简单,更短:

const ParentThatFetches = () => {
  const [data, updateData] = useState();
  useEffect(() => {
    const getData = async () => {
      const resp = await fetch('some/url');
      const json = await resp.json()
      updateData(json);
    }
    getData();
  }, []);

  return data && <Child data={data} />
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在嵌套的异步/等待函数中返回数据

如何在异步等待函数中返回值?

异步/等待-如何在递归Ajax函数中实现Javascript异步等待?

如何使函数等待节点js中的异步函数解析?

如何让构建函数等待 Flutter 中的异步函数?

如何在React(异步/等待)中创建原子进程?

如何等待异步函数中的获取响应?

如何等待rust中的异步函数调用列表?

如何正确等待javascript中异步函数的返回?

如何在React中的UseEffect()中调用异步函数?

React - 从 render() 调用异步函数

如何在Dart中实现异步/等待

如何在Python中编写自己的异步/等待协程函数?

如何在同步函数中等待JavaScript中的异步调用?

如何在Flutter中渲染小部件之前等待异步函数完成执行

如何在React TypeScript中渲染异步函数的输出?

如何在React中等待多个异步等待请求

如何在react render函数中创建动态href?

如何在 React 中等待函数的结果?

即使等待位于 Node.js 中的异步函数中,如何修复“await 仅在异步函数中有效”?

如何修复异步/等待函数中的``response.json不是函数''

异步函数如何等待内部异步函数的回调?

如何在forEach函数上进行异步等待

如何在flutter中等待异步函数完成处理

如何在PuppeteerSharp中等待异步函数评估

React Jest 如何测试正在调用的外部异步等待函数?

如何等待异步函数执行?

如何让 Angular 组件 UI 等待异步函数

我如何“等待”异步super()构造函数?