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事件,但它仍然没有得到更新.
谢谢
经过几天的努力解决这个问题,我找到了一个解决方案。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)
我尝试只克隆和重置手风琴,但显然它没有更新组件。
谢谢
| 归档时间: |
|
| 查看次数: |
5213 次 |
| 最近记录: |