扩展状态反应

时间:2018-08-09 12:50:37

标签: javascript reactjs extends

我需要继承状态。我可以继承状态吗?当我这样做时,我得到一个空状态。

class Example extends Component {
  constructor(props) {
    super();
      this.state = {
        param1: 
      };
  }
 ...
}

class Example2 extends Example {
  render() {
    return (
      {this.state.param1} // empty
    )
  }
}

5 个答案:

答案 0 :(得分:1)

您可以使用常规合成,而不是使用继承,而是将整个Example状态作为道具传递给Example2,并使用传递给Example2的道具作为初始状态。

示例

class Example extends React.Component {
  state = {
    param1: "test"
  };

  render() {
    return <Example2 {...this.state} />;
  }
}

class Example2 extends React.Component {
  state = {...this.props};

  render() {
    return <div>{JSON.stringify(this.state)}</div>;
  }
}

ReactDOM.render(<Example />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="root"></div>

答案 1 :(得分:0)

React并不真正支持继承,您可以在此链接上找到更多信息:

  

https://reactjs.org/docs/composition-vs-inheritance.html#so-what-about-inheritance

您可以做的是拥有一个全局状态管理器(例如Redux)或通过以下方式将状态传递给Example2组件:

class Example extends Component {   
  constructor(props) {
    super(props);

    this.state = {
      param1: 'test'
    };

  render() {
    return (
      <Example2 state={this.state} />
    );   
  } 
}

之后,您将可以在Example2的{​​{1}}中找到它。

答案 2 :(得分:0)

class Example extends Component {
  constructor(props) {
    super();
      this.state = {
        param1: "param1"
      };
  }
  render() {
  const { param1 } = this.state;
  return (
  <Example2 param1={param1} />
 )
 }
}   

class Example2 extends Example {
  render() {
    const { param1 } = this.props;
    return (
      {param1} 
    )
  }
}

答案 3 :(得分:0)

科维奇。您只能将一个组件的状态传递给另一个组件,例如以下代码:

class Example extends Component {
  constructor(props) {
    super();
      this.state = {
        param1: 
      };
  }

render(){

return (<Example2 param1 ={this.state.param1} />)
}

 ...
}

class Example2 extends Example {

  constructor(props) {
    super();
      this.state = {
        param1: this.props.param1
      };
  }
  render() {
    return (
      {this.state.param1} // empty
    )
  }
}

答案 4 :(得分:0)

您可以如下扩展状态:

constructor(props) {
  super(props)

  this.state = {
    ...this.state,
    extraStuff: '',
  }
}