React组件视图不会更新

我有一个React组件pipe理列表中的多个手风琴,但是当我更新一个孩子,在React开发工具,它显示更新的文本,但在视图/用户界面,它不更新。 请指教。

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> ); } 

在这里输入图像描述

在这里输入图像描述

编辑:
该组件确实触发了componentWillReceiveProps事件,但仍然不会更新。

谢谢

       

网上收集的解决方案 "React组件视图不会更新"

经过几天的努力来解决这个问题,我已经提出了一个解决scheme。 componentWillReceiveProps事件在组件的道具改变时被触发,所以没有问题。 问题在于AccordionListComponentAccordionComponent的孩子没有更新其值/ props / state。

当前解决scheme

 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 }); } 

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

谢谢

我遇到了类似的问题。 所以在这里报告我的解决scheme可能是相关的。


我有一个graphics,没有得到更新,只要我点击一次加载数据button(我可以看到第二次点击后的视觉改变)。

图组件被devise为父组件的子组件(连接到Redux商店),因此数据作为通道传递。

问题:数据是从商店(父母)正确提取,但似乎图组件(孩子)没有对他们作出反应。

解:

  componentWillReceiveProps(nextProps) { this.props = null; this.props = nextProps; // call any method here } 

希望可以有所贡献。