Redux存储道具不适用于React构造函数

时间:2018-10-12 13:10:29

标签: javascript reactjs redux react-redux

我已经在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函数进行设置状态的调用。

对这个问题有何想法?

丹尼尔

1 个答案:

答案 0 :(得分:0)

为什么您认为需要将从道具获得的数据放入组件状态? 至于使用数据,两者之间没有什么区别,除了如果您将道具复制到状态时,您更有可能遇到麻烦(请参见发布的链接)。

const { A } = this.state;
const { A } = this.props;

如果数据是通过异步方法传入的,则应将其容纳在渲染方法中。

render() {
  const { A } = this.props;
  if (!A) {
    return <LoadingIndicator />
  }
  ...
}