/*初学者*/react 函数组件如何把自己的 useState 向上传,或者是外部如果获取某个组件的 state

2020-11-22 21:04:32 +08:00
 park4ce666
react 新手,学的是函数式组件和 hooks 的方式;
想做的是简单的 <input/> 子组件会有好几个,在某个阶段会把用户输入的几个 <input />里的值都收集起来,因为<input />是函数组件创造的 ,里面的值是 useState 保存的,我要怎么获取到每个子组件的值,还是我应该用什么 hook 可以让子组件<input/>自己的值和父级组件绑定的?希望各位指条路
2098 次点击
所在节点    React
9 条回复
leoyzh97
2020-11-22 21:35:26 +08:00
说不就是受控组件嘛,可以看看 antd form 表单的实现。应该就是父组件生成一个 fieldstore 原来存储子组件的表单字段,生成一个注册方法给子组件注册,然后监听 onchange 事件。
leoyzh97
2020-11-22 21:35:36 +08:00
这不就是受控组件嘛,可以看看 antd form 表单的实现。应该就是父组件生成一个 fieldstore 原来存储子组件的表单字段,生成一个注册方法给子组件注册,然后监听 onchange 事件。
azcvcza
2020-11-23 09:41:03 +08:00
也没到那么搞中间层 form 的地步,你就在
`
const Parent = (props)=>{
const [pState,setPState] = useState({});

function handlePStateChange(InputName, value){
setPState({
...pState,
[InputName]:value,
})
}

return (
<div>
<Child id={'1'} handleChange={handlePStateChange} />
....
<Child id={'n'} handleChange={handlePStateChange} />
</div>
)
}
const Child = (props) =>{
const [input, setInput] = useState();


return (
<Input onChange={(e)=>props.handleChange(props.id, e.target.value)} />
)

}
`
awefeng
2020-11-23 10:48:39 +08:00
父组件给个监听给子组件就好了 固定一下范式
susunus
2020-11-23 12:43:31 +08:00
usecallback 这个从父组件传给自组件
ljpCN
2020-11-23 13:11:01 +08:00
最简单的方式是子组件不要保存状态,状态提升到父组件
park4ce666
2020-11-23 14:32:01 +08:00
收到并阅读了大家的想法和意见后,我打算试一下给父级组件创建一个 use Context 的钩子,然后子组件通过 Context 和父级共享状态,这么写,每一次应用组件的时候可能要根据子组件的数量和对应的字段属性在父级手动先预设好,感觉还是有些死板,目前我的脑子只够写到这一步了,不知道还能否优化到自动适配子组件。
KuroNekoFan
2020-11-23 14:41:36 +08:00
需要导出状态变化的组件可以提供一个 props, onCompStateChange,调用方 /父组件通过传入一个函数就可以拿到其状态变化了
子组件不保存状态不是一个好做法,该有本地状态就应该有本地状态
justsosososo
2020-11-23 16:01:42 +08:00
hook 只是用来简写的新特性 该 props 还是得 props 不要被这些概念混淆了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX