当前位置: 首页 > 知识库问答 >
问题:

功能组件子组件在其父组件更新其道具后不重新呈现

东方华荣
2023-03-14

parentcomponent.js

let childData = 0;

function ParentComponent() {
    function handleClick() {
        childData++;
    }

    return (<>
        <button onClick={handleClick}>Increment</button>
        <ChildComponent data={childData} />
    </>);
    }

ChildComponent.js

export default function ChildComponent(props) {
    return(<p>Child Component: {props.data}</p>);
}

为什么在单击increment按钮后,子组件仍然显示旧值而不重新呈现?

共有1个答案

武嘉祥
2023-03-14

React组件仅在状态和/或道具更新时重新呈现。由于ContainerComponent没有状态,GraphData道具也不更改,因此ContainerComponent永远不会重新发送,其子级也不会。

将状态添加到ContainerComponent。当FiltedData状态更新时,ContainerComponent将与子级一起重新Render。

function ContainerComponent(props) {
  const { graphData } = props;
  const [filteredData, setFilteredData] = React.useState([...graphData]);
  function handleClick() {
    setFilteredData((data) => data.filter((x) => x > 0));
  }

  return (
    <>
      <button onClick={handleClick}>Filter</button>
      <GraphComponent data={graphData} />
      <TableComponent data={filteredData} />
    </>
  );
}
let childData = 0;

function ContainerComponent() {
    function handleClick() {
        childData++;
    }

    return (<>
        <button onClick={handleClick}>Increment</button>
        <ChildComponent data={childData} />
    </>);
}

ChildData也不起作用,因为现在对象引用从不改变,每次只需改变相同的引用。您需要将childData存储在组件状态中,并更新该状态以将该组件更新为rerender。

 类似资料:
  • 在父组件中: 我有一个布尔状态: 我将其发送到子组件: 根据布尔值,我希望它呈现不同的组件。

  • 这个问题在这里已经得到了回答,但事情总是在变化。 基本上,父组件获取一些数据,子组件需要这些数据。 这是子组件。

  • 诉求:react父组件某些值改变后,需要让子组件同步更新,但是这个过程不能让父组件重新渲染 请帮忙罗列下所有可能的方式

  • 我对JS的反应有点陌生。我有两个问题。我来了 现在我要做的是,当应用程序组件挂载时,我生成一个对后端服务器的ajax调用,当它返回时,它更新道具,并设置状态,这样子组件也会重新呈现,但子组件不会重新呈现。谁能告诉我出了什么问题。 问题2 现在让我们假设我将进入组件二路由,它将呈现组件二,我在应用程序组件中生成一个ajax调用,根据ajax调用返回的数据,我在应用程序组件中设置了一些道具,我还希望组

  • 我正在做一个React-Native项目,我意识到React-Native似乎打破了React-flow(父到子)道具更新。 基本上,我是从“应用程序”组件调用“菜单”组件,将一个道具传递给“菜单”。然而,当我更新“应用程序”状态时,“菜单”上的道具应该更新,但这不会发生。我做错什么了吗? 这是我的密码: 一个pp.js 菜单js

  • 我是新来的反应。作为一个学习练习,我正在构建一个国际象棋应用程序 我想根据父级中的状态更改子级的DOM。当前,在父级组件的状态变化时,子级组件没有变化。 PS:请忽略任何语法错误。这段代码是实际代码的精简。如果你想看完整的代码,请看这里