Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在调用渲染之前加载状态?_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs 如何在调用渲染之前加载状态?

Reactjs 如何在调用渲染之前加载状态?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我知道问题是页面在我加载状态之前呈现。我正在使用谷歌地图,并试图从我的用户位置创建标记。问题在于,在从redux加载状态之前,状态是一个空数组。我该如何处理这个问题。我将在下面发布代码 关心这一点的函数是generateInitialMarkers,它在标记的this.state中获取构造函数方法传递给它的项 一个快速修复方法是,如果预期的道具还不存在,那么在您的州不调用generateInitialMarkers markers: (props.browser.items.length >

我知道问题是页面在我加载状态之前呈现。我正在使用谷歌地图,并试图从我的用户位置创建标记。问题在于,在从redux加载状态之前,状态是一个空数组。我该如何处理这个问题。我将在下面发布代码

关心这一点的函数是generateInitialMarkers,它在标记的this.state中获取构造函数方法传递给它的项


一个快速修复方法是,如果预期的道具还不存在,那么在您的州不调用generateInitialMarkers

markers: (props.browser.items.length > 0) ?
 generateInitialMarkers(props.browser.items) : ""
然后,组件收到所需的browser.items道具后,将其添加到状态

componentWillReceiveProps(nextProps) {
    this.setState({ markers: generateInitialMarkers(nextProps.browser.items) })
}
您可能还需要阻止渲染函数/GeolocationExampleGoogleMap组件调用this.state.markers,直到指定了正确的值

请记住,这是一个有点黑客

更理想的解决方案是确保在调用OfferMap组件之前传递所需的道具

进一步阅读

请阅读本页,以更好地了解react组件生命周期:

此外,听起来您还想将redux状态映射到组件中的属性。也可以查看此页面:


你试过componentWillMount生命周期方法吗?是的,我试过了。你试过使用setTimeout到1秒吗?这是你的componentDidMount中的一个javascript函数吗?你是说要这样做吗。在componentDidMount中设置状态{markers:GenerateMarkers this.props.browser.items},不确定你说的是什么。只是说看看这个并不能给我一个答案。修改了我原来的答案。如果有帮助,请告诉我。
componentWillReceiveProps(nextProps) {
    this.setState({ markers: generateInitialMarkers(nextProps.browser.items) })
}