javascript - 父组件的状态更新后,组件不会更新

标签 javascript reactjs

import React, {Component} from 'react';
import "./DisplayCard.css";

class DisplayCard extends Component {
runArray = (array) => {
  for (var i = 0; i<array.length; i++) {
    return <div>{array[i].task}</div>
  }
}

renderElements = (savedTasks) =>{
  if (savedTasks.length === 0) {
    return <div className="noTasks"> <p>You have no saved tasks.</p> </div>
  } else {
    return this.runArray(savedTasks)
  }
}


render() {
  return (
  <div className="DisplayCardContainer">
    {this.renderElements(this.props.saved)}
  </div>
  )
}
}
export default DisplayCard;

大家好,

我是 react 新手,所以这是我的子组件,它从其父组件获取状态。我的目标是每次数组 this.props.saved 时重新渲染组件已更改。

该组件呈现:<p>You have no saved tasks.</p>this.props.saved.length === 0它呈现 <div>{array[0].task}</div>当我进入第一个任务时,但它保持在 <div>{array[0].task}</div>在那之后。我确实看到状态在不断变化并且 this.props.saved不断变大,但我的组件不再改变。

最佳答案

这是你的问题:

runArray = (array) => {
   for (var i = 0; i<array.length; i++) {
     //the first time we get here, it immediately ends the function!
     return <div>{array[i].task}</div>
   }
}

此循环仅执行一次(在 i=0 处),然后返回,退出 runArray 函数并取消循环的其余部分。您可能想要返回一个元素数组,每个元素对应一个任务。我建议使用 Array.map() 来实现此目的,它采用一个数组并转换每个元素,创建一个新数组:

runArray = (array) => {
    return array.map(arrayElement => <div>arrayElement.task</div>);
}

这应该可以解决问题。请注意,React 可能会提示您的元素缺少 key 属性 - 请参阅文档以获取更多信息:https://reactjs.org/docs/lists-and-keys.html

关于javascript - 父组件的状态更新后,组件不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54382932/

相关文章:

javascript - 选中/取消选中除一个复选框之外的所有复选框。?

javascript - 从对象数组中删除当前索引

javascript - CSS:除非页面滚动,否则渐变标题 100% 屏幕宽度很好

javascript - 交换字符串中单词的最佳方法是什么

reactjs - 在 React 中向映射数组的特定项添加特定样式

javascript - 如果当前在该 route ,则将导航选项卡样式类设置为事件状态

javascript - 如何获取每个链接的哈希值?

javascript - 列出每个元素的修改按钮

reactjs - AWS Amplify React Site 构建失败,原因不明

javascript - 在另一个 React 元素中作为依赖项安装时,自定义 React 组件库不加载 CSS