我正在寻找将数据从子组件传递给其父组件的最简单解决方案.

我听说过使用上下文、传递属性或更新props ,但我不知道哪一个是最好的解决方案.

我正在构建一个管理界面,有一个PageComponent,其中包含一个ChildComponent,还有一个表,我可以在其中 Select 多行.我想把我在ChildComponent中 Select 的行数发送给我的父PageComponent.

诸如此类:

页面组件:

<div className="App">
  <EnhancedTable />         
  <h2>count 0</h2>
  (count should be updated from child)
</div>

子组件:

 const EnhancedTable = () => {
     const [count, setCount] = useState(0);
     return (
       <button onClick={() => setCount(count + 1)}>
          Click me {count}
       </button>
     )
  };

我相信这是一件非常简单的事情,我不想使用redux来实现这一点.

推荐答案

您可以在父组件中创建一个方法,将其传递给子组件,并在每次子组件的状态更改时从props调用它,从而将状态保留在子组件中.

    const EnhancedTable = ({ parentCallback }) => {
        const [count, setCount] = useState(0);
        
        return (
            <button onClick={() => {
                const newValue = count + 1;
                setCount(newValue);
                parentCallback(newValue);
            }}>
                 Click me {count}
            </button>
        )
    };

    class PageComponent extends React.Component { 
        callback = (count) => {
            // do something with value in parent component, like save to state
        }

        render() {
            return (
                <div className="App">
                    <EnhancedTable parentCallback={this.callback} />         
                    <h2>count 0</h2>
                    (count should be updated from child)
                </div>
            )
        }
    }

Reactjs相关问答推荐

来自Ldap.js的res.on(searchEntry)不会在Next.js生产模式下返回结果

自动化幻灯片放映以防止React中重复过多的正确方法是什么

使用Thattle和Use Effect setTimeout进行搜索有什么不同

后端关闭时如何在REACTION AXIOS拦截器中模拟数据?

Reaction Hook';useEffect&;有条件呼叫问题:

如何处理具有REACTION-REDUX状态的Nextjs路由警卫

NextJS如何正确保存添加到购物车中的产品会话

StyleX中的多语言支持

获取更改后的状态值

用于获取带有事件处理程序的API的动态路由

GitHub页面配置

如果我使用 formik,如何在嵌套对象中写入正确的值?

如何将 npm 包添加到我的 Vite + React 应用程序中?

ReactJS 中的图像加载顺序

Firebase查询返回随机用户数据,而不是过滤后的用户数据

如何在 React.js 中提取 PDF 的内容?

使用 toast 时挂钩调用无效

我收到Uncaught TypeError: props.handleSelect is not a function

如何保留我的下一个授权用户会话?所以我可以使用提供的 ID 在其他路由中获取数据

如何从 graphql/apollo 中的缓存中清除多个查询