javascript - 子组件不会更改 prop

标签 javascript reactjs

我有以下结构:

class Parent extends React.Component {

  componentDidMount() {
    document.addEventListener('keydown', () => {
      this.value++;
    })
  }

  this.value = 0;

  render() {
    return (<ChildComponent value={this.value} />) 

ChildComponent 只是呈现值:

class ChildComponent extends Component {
  render() {
    return (
        <div>
            {this.props.value}
        </div>
    );
  }}

我不想在每个 KeyDown 事件上重新呈现父组件,这就是我不为状态赋值的原因。

我希望 ChildComponent 在每次 KeyDown 事件时重新呈现,但 ChildComponent 只呈现一次,因为它没有获得更改的值并且始终显示 0,尽管 this.value 正在更改。

是否可以在更改 ParentComponent 的 this.value 时重新呈现 ChildComponent,或者我应该使用 setState 将逻辑放入 ChildComponent 以呈现正确的结果?

最佳答案

您应该将值添加到父状态。这就是 React 的工作方式。即使您可以在子组件上手动触发重新渲染,它仍然是 0,因为仍然提供 0 Prop 。当 React 检测到父组件的状态发生变化时,它将计算所有子元素的虚拟 dom,对虚拟 dom 与真实 dom 进行比较,然后使用这些值选择性地更新真实 dom(仅子元素的内部文本组件 div 实际上是新的)。 React 针对使用虚拟 dom 处理重新渲染进行了令人难以置信的优化,您不必担心这种情况下的性能损失。

关于javascript - 子组件不会更改 prop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53458027/

相关文章:

javascript - Reactjs 没有在子进程中调用 onChange 回调

jquery-ui - 如何在 React JS 中使用 jQuery UI

javascript - javascript 对象文字中字段名称的字符串

javascript - 如何从 node.js 检索数据到 Ajax?

javascript - jquery 不能在 IE、Chrome 中工作,可以在 FF 中工作

javascript - 模式打开时使抽屉可见。 react native

javascript - 在输入占位符中调用组件

javascript - 为什么我的箭头函数不返回数组而是函数声明

java - 如何获取包含 HtmlUnit 错误的网页?

javascript - 如何在 redux 中将唯一项添加到数组中