React - 使用按钮设置状态并将其作为道具传递

时间:2017-08-11 17:53:44

标签: javascript reactjs meteor

我想使用'compare'按钮将比较状态切换为true或false。 接下来我想将此比较状态传递给pivot作为道具。

在查看Toggle类时,我确实使用与react文档中相同的代码。 https://facebook.github.io/react/docs/handling-events.html 我唯一改变的是名称isToggleOn进行比较。

在查看控制台客户端时,每次组件呈现时都会出现以下错误:

  

modules.js?hash = 5bd264489058b9a37cb27e36f529f99e13f95b78:3941警告:setState(...):在现有状态转换期间无法更新(例如在render或其他组件的构造函数中)。渲染方法应该是道具和状态的纯函数;构造函数副作用是反模式,但可以移动到componentWillMount。“

我的代码如下:

class Dashboard extends Component {
  constructor(props) {
    super(props);
    this.state = { compare: true };

    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(button) {
    if (button === 'compare') {
      this.setState(prevState => ({
        compare: !prevState.compare,
      }));
    }
  }

  render() {
    return (
      <Grid>
        <div className="starter-template">
          <h1>This is the dashboard page.</h1>
          <p className="lead">
            Use this document as a way to quickly start any new project.<br />{' '}
            All you get is this text and a mostly barebones HTML document.
          </p>
        </div>

        <ButtonToolbar>
          <button onClick={this.handleClick('compare')}>
            {this.state.compare ? 'AGGREGATE' : 'COMPARE'}
          </button>
        </ButtonToolbar>

        <PivotTable
          ready={this.props.isReady}
          data={this.props.gapData}
          compare={this.state.compare}
        />
      </Grid>
    );
  }
}

export default (DashboardContainer = createContainer(() => {
  // Do all your reactive data access in this method.
  // Note that this subscription will get cleaned up when your component is unmounted
  const handle = Meteor.subscribe('weekly-dashboard');

  return {
    isReady: handle.ready(),
    gapData: WeeklyDashboard.find({}).fetch(),
  };
}, Dashboard));

有关如何解决此问题的任何建议?

0 个答案:

没有答案