在React组件之间共享属性

时间:2016-03-31 23:00:03

标签: javascript reactjs properties components

我正在使用React构建一种时钟,它可以选择在一个组件中增加或减少一个数字(默认为25),而在另一个组件中它会更新计时器(从我们开始时的25:00开始) 25)无论数字递增还是递减到。

我有两个组件(会话和时钟)成功执行自己的操作,但是我很难知道如何让计数器(会话组件)更新时钟组件中的计时器状态。更具体地说,我一直在玩this.props.minutes无济于事。

问题:如何在组件之间共享this.state.minutes属性?先感谢您。我还是React的初学者。

会话:

const Session = React.createClass({

  getInitialState: function() {
    return {
      minutes: 25,
      seconds: 0
    };
  },

  increment: function() {
    this.setState({ minutes: this.state.minutes + 1 });
  },

  decrement: function() {
    this.setState({ minutes: this.state.minutes - 1 });
  },

  timeToString: function(time) {
    return time + ':00';
  },

  render: function() {
    return (
      <section>
        <button onClick={this.increment}>+</button>
        <button onClick={this.decrement}>-</button>
        {this.state.minutes}
        <Clock/>
      </section>
    );
  }

});

module.exports = Session;

时钟:

const Clock = React.createClass({

  getInitialState: function() {
    return { currentCount: 10 };
  },

  startTimer: function() {
    var intervalId = setInterval(this.timer, 1000);
    this.setState({ intervalId: intervalId });
  },

  pauseTimer: function() {
    clearInterval(this.state.intervalId);
    this.setState({ intervalId: this.state.currentCount });
  },

  timer: function() {
    var newCount = this.state.currentCount - 1;
    if (newCount >= 0) {
      this.setState({ currentCount: newCount });
    } else {
      clearInterval(this.state.intervalId);
    }
  },

  render: function() {
    return (
      <section>
        <button onClick={this.startTimer}>Start</button>
        <button onClick={this.pauseTimer}>Pause</button>
        {this.state.currentCount}
      </section>
    );
  }

});

module.exports = Clock;

1 个答案:

答案 0 :(得分:1)

您需要将状态从Session传递到Clock,如下所示:

会话组件中的

<Clock time={this.state.minutes} />

然后&#39;状态&#39;现在,您的时钟组件可以this.props.time

使用

或上述代码中的任何内容。

故事的寓意是从父组件传递到子组件的状态是使用道具完成的

相关文件:

https://facebook.github.io/react/docs/multiple-components.html

编辑:文档中的另一个关键链接:

https://facebook.github.io/react/tips/communicate-between-components.html