【发布时间】:2019-07-22 23:28:23
【问题描述】:
假设我有一个渲染PivotGrid 组件的组件。这个PivotGrid 需要一些数据,一个对象数组。
function My_component(props) {
return <PivotGrid dataSource={props.data} />
}
但是,我要传入的 data 属性是异步函数的结果。
const get_data = async () => {
return await o(url, options).get('foo').query({})
}
ReactDOM.render(<My_component data={get_data()}/>, document.getElementById('root'));
发生的情况是组件在来自get_data() 的承诺被解析之前呈现,并且 PivotGrid 没有数据。
我希望组件在 promise 解决并实际返回数据时重新渲染。我已经尝试过 React 的 useState() 的变体,将 props.data 视为状态变量,这样当承诺返回时,状态会改变,组件也会更新。但这还没有奏效。
const [gridData, setGridData] = useState(props.data);
props.data.then((r) => {
setGridData(props.data)
})
上述尝试都失败了。实现此功能的最佳方式是什么,当prop.data 解析并实际保存我想要的数据时,组件会重新呈现?
【问题讨论】:
-
签出
useEffectreactjs.org/docs/hooks-effect.html -
您可以在
My_component中调用get_data函数,而不是通过 props 传递数据,在那里您可以使用钩子或将其转换为 React 组件来控制组件的呈现。 -
感谢@SimoMatavulj 的回复。我想将此数据作为道具传递,以便此组件可重用。
-
您可以创建一个包装器来获取数据并将其传递给您的
My_component
标签: javascript reactjs asynchronous properties async-await