javascript – 反应事件层次结构问题

前端之家收集整理的这篇文章主要介绍了javascript – 反应事件层次结构问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
处理深节点中的状态更改的最佳方法是什么,这也需要由父节点处理.这是我的情况:
<Table>
  <Row prop={user1}>
    <Column prop={user1_col1} />
    <Column prop={user1_col2} />
  </Row>
  <Row prop={user2}>
    <Column prop={user2_col1} />
    <Column prop={user2_col2} />
  </Row>
  <TableFooter>
    <FooterColumn prop={sum1} />
    <FooterColumn prop={sum2} />
  </TableFooter>
</Table>

每当有人在列属性中更改任何内容时,我只需要在该Column组件中维护此值的状态.但是,我现在想要FooterColumn组件中的这些值的总和.实现这一目标的最佳方法是什么?

如果我要放弃状态改变,我必须将状态保存在多个地方,然后将其传递下去,这是一项繁琐的工作.是最好使用EventEmitters还是我错过了什么?

解决方法

因此,您只需要跟踪父组件中的状态,并与子组件共享状态更新功能
var Parent = React.createClass({
  getInitialState: function() {
    return {
      users: [
        {name: 'Matt',values: [1,2]},{name: 'user517153',values: [4,5]}
      ]
    };
  },updateValue: function(rowId,colId,newValue) {
    var newUseRSState = this.state;
    newUseRSState.users[rowId].values[colId] = newValue;
    this.setState({users: newUseRSState});
  },render: function() {
    var rows = this.state.users.map(function(user,r) {
      var cols = user.values.map(function(value,c) {
        return (
          <Column key={c} prop={value} rowId={r} colId={c} onChange={this.updateValue}/>
        );
      });

      return (
        <Row key={r} prop={user}>
          {cols}
        </Row>
      );
    });

    // Yes,it could be more efficient if you did it all in one map/forEach - doing this in a second one for clarity
    var footerCols = this.state.users.map(function(user) {
      var sum = 0;
      user.values.forEach(function(value) { sum+= value; });
      return (
        <FooterColumn prop={sum} />
      );
    });

    return (
      <Table>
        {rows}
        <TableFooter>
          {footerCols}
        </TableFooter>
      </Table>
    );
  }
});

在Column类中,您只需要以下内容

var Column = React.createClass({
  onChange: function(event) {
    var props = this.props;

    var newValue = event.target.value; // Get the new value somehow - this is just an example
    props.onChange(props.rowId,props.coldId,newValue);
  },render: function() {
    var props = this.props;

    return (
      <td onChange={this.onChnage}>{props.prop}</td>
    );
  }
});

希望有道理.

原文链接:https://www.f2er.com/js/158047.html

猜你在找的JavaScript相关文章