我已经在Redux&React上工作了几个月。我通常总是使用Chrome,没有问题。 (实际上是无尽的错误:))。
当我开始在Firefox中进行测试时,遇到了一个问题,我需要一些帮助...以了解是否有解决此问题的完美方法...
问题 调用构造函数时,MapStateToProps的Redux Props尚不可用,这意味着我无法在组件构造函数中构造组件状态。这些道具随后在渲染功能中迅速可用。在这个阶段,为时已晚,因为我无法在render函数中构造状态(可以以某种方式工作,但是对正确的方法不好吗?)。
目前,我正在使用componentWillReceiveProps并使用一个异常复制我的构造函数
构造函数
constructor(props){
super(props);
//Loads of code named A
this.state = {state:A};
}
组件将获得道具功能
componentWillReceiveProps (){
//Loads of code named A
this.setState({state:A});
}
这里可能会覆盖我的状态,但就我的实际情况而言,这里仅显示数据,没有发生UI更改...这两种方法都不是正确的方法...
我读了这篇文章 https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
我不确定我是否完全理解这一点。我没有进行任何尝试就做了一些实验。
理想情况下,我需要构造函数暂停直到填充完所有的redux存储,这也是没有意义的。道具数组可能为空。
有一些关于Slack的讨论,但似乎没有一个能解决这个问题。我尝试了Google搜索,但找不到确切的问题解决了...
我需要mapStateToProps道具来构造我的状态。看来我将无法执行此操作,并且需要完全重构代码,使其仅在具有三元运算符的负载的render函数中工作,并且/或者在render返回之前从render函数进行设置状态的调用。
对这个问题有何想法?
丹尼尔
答案 0 :(得分:0)
为什么您认为需要将从道具获得的数据放入组件状态? 至于使用数据,两者之间没有什么区别,除了如果您将道具复制到状态时,您更有可能遇到麻烦(请参见发布的链接)。
const { A } = this.state;
const { A } = this.props;
如果数据是通过异步方法传入的,则应将其容纳在渲染方法中。
render() {
const { A } = this.props;
if (!A) {
return <LoadingIndicator />
}
...
}