React组件视图未获得更新

eug*_*ene 7 javascript node.js reactjs

我有一个React组件来管理列表中的多个手风琴,但是当我更新一个孩子时,在React dev工具上,它显示了更新的文本,但在视图/ ui上,它没有更新.请指教.

var AccordionComponent = React.createClass({
  getInitialState: function() {
  var self = this;
  var accordions = this.props.children.map(function(accordion, i) {
   return clone(accordion, {
    onClick: self.handleClick,
    key: i
  });
});

  return {
    accordions: accordions
  }
},
handleClick: function(i) {
  var accordions = this.state.accordions;

  accordions = accordions.map(function(accordion) {
    if (!accordion.props.open && accordion.props.index === i) {
      accordion.props.open = true;
    } else {
      accordion.props.open = false;
    }
    return accordion;
  });

  this.setState({
    accordions: accordions
  });
},
componentWillReceiveProps: function(nextProps) {
  var accordions = this.state.accordions.map(function(accordion, i) {
    var newProp = nextProps.children[i].props;

    accordion.props = assign(accordion.props, {
      title: newProp.title,
      children: newProp.children
    });

    return accordion;
  });

  this.setState({
    accordions: accordions
  });
},
render: function() {
  return (
    <div>
      {this.state.accordions}
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

编辑:
组件确实触发了componentWillReceiveProps事件,但它仍然没有得到更新.

谢谢

eug*_*ene 5

经过几天的努力解决这个问题,我找到了一个解决方案。componentWillReceiveProps当组件的 props 发生变化时,事件就会被触发,所以没有问题。问题是 , 的子级AccordionListComponent没有AccordionComponent更新其值/属性/状态。

目前的解决方案:

componentWillReceiveProps: function(nextProps) {
 var accordions = this.state.accordions.map(function(accordion, i) {
    // get current accordion key, and props value
    // update new props with old
    var newAc = clone(accordion, nextProps.children[i].props);

    // update current accordion with new props
    return React.addons.update(accordion, {
      $set: newAc
    });
  });

 this.setState({
   accordions: accordions
 });
}
Run Code Online (Sandbox Code Playgroud)

我尝试只克隆和重置手风琴,但显然它没有更新组件。

谢谢