【问题标题】:React component view does not get updateReact 组件视图没有得到更新
【发布时间】:2015-03-30 09:11:58
【问题描述】:

我有一个 React 组件可以管理列表中的多个手风琴,但是当我更新子组件时,在 React 开发工具上,它显示了更新的文本,但在视图/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>
  );
}

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

谢谢

【问题讨论】:

    标签: javascript node.js reactjs


    【解决方案1】:

    经过几天的尝试解决这个问题,我想出了一个解决方案。 componentWillReceiveProps 事件是在组件的 props 发生变化时触发的,所以没有问题。问题是AccordionListComponentAccordionComponent 的子代没有更新其值/道具/状态。

    目前的解决方案:

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

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

    谢谢

    【讨论】:

      【解决方案2】:

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


      我有一个图表在我点击一次加载数据按钮时没有得到更新(第二次点击后我可以看到视觉变化)。

      图形组件被设计为父组件(连接到 Redux 存储)的子组件,因此数据作为道具传递。

      问题:数据已从存储中正确获取(在父级中),但图形组件(子级)似乎没有对它们做出反应。

      解决方案:

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

      希望能以某种方式做出贡献。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-04
        • 2022-01-05
        • 2021-01-19
        • 2021-01-12
        相关资源
        最近更新 更多