Javascript 如何将redux状态片映射到本地组件状态?

Javascript 如何将redux状态片映射到本地组件状态?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,目前我正在使用以下工具: const mapStateToProps = state => { return { stateInProps: state.someSliceIWant }; }; Foo.propTypes = { dispatch: PropTypes.func, stateInProps: PropTypes.object }; export default connect(mapStateToProps)(Foo); 由于我们实际上只能将

目前我正在使用以下工具:

const mapStateToProps = state => {
  return {
    stateInProps: state.someSliceIWant
  };
};

Foo.propTypes = {
  dispatch: PropTypes.func,
  stateInProps: PropTypes.object
};

export default connect(mapStateToProps)(Foo);
由于我们实际上只能将状态映射到道具,而不能直接映射到我的组件中的状态,所以我通过这样做以一种黑客的方式绕过了这个问题:

class Foo extends React.Component {

  constructor(props){
    super(props);

    this.state = {};

    setTimeout(() => {this.setState(this.props.stateInProps);},1);

  }
我应该如何正确地做到这一点?我尝试过使用不同的生命周期挂钩和各种方法

我发现一件有趣的事情是,如果我将setState()放在MapStateTrops中。。。。它几乎起作用了

const mapStateToProps = state => {
  Foo.setState(state.someSliceIWant);
  return {
    stateInProps: state.someSliceIWant
  };
};

它抛出了一堆错误,但当我删除这一行和网页包磨通过和网页重新呈现,状态实际上已被正确更新,值存在!什么?!我不知道如何在不抛出错误的情况下让它这样做,因为Redux/React本身无法尽我所能允许它这样做

将状态映射到道具后,您是否尝试过ComponentWillReceiveProps

例如:

componentWillReceiveProps(nextProps) {
    if (nextProps.errors) {
      this.setState({
        errors: nextProps.errors
      });
    }
  }

如果在以后的生命周期中更新您的
stateInProps
,您可能无法使用您的黑客方式访问它

你可以使用下面的东西

class Foo extends React.Component {

  state = {};

  componentWillMount() { this.setStateInProps(this.props); }

  componentWillReceiveProps(nextProps) { this.setStateInProps(nextProps)}

  setStateInProps= (props) => this.setState(props.stateInProps)

}

componentWillReceiveProps()不适用于您?1。为什么要将redux状态存储为组件状态?2.您可以对+1使用
componentdiddupdate
,以获得@pergy的评论。是否有任何原因阻止您直接使用
this.props.stateInProps
?不建议将redux状态复制到本地状态。