/*初学者*/react 函数组件如何把自己的 useState 向上传,或者是外部如果获取某个组件的 state - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
park4ce666
V2EX    React

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

  •  
  •   park4ce666 2020-11-22 21:04:32 +08:00 via iPhone 2665 次点击
    这是一个创建于 1867 天前的主题,其中的信息可能已经有所发展或是发生改变。
    react 新手,学的是函数式组件和 hooks 的方式;
    想做的是简单的 <input/> 子组件会有好几个,在某个阶段会把用户输入的几个 <input />里的值都收集起来,因为<input />是函数组件创造的 ,里面的值是 useState 保存的,我要怎么获取到每个子组件的值,还是我应该用什么 hook 可以让子组件<input/>自己的值和父级组件绑定的?希望各位指条路
    9 条回复    2020-11-23 16:01:42 +08:00
    leoyzh97
        1
    leoyzh97  
       2020-11-22 21:35:26 +08:00 via Android
    说不就是受控组件嘛,可以看看 antd form 表单的实现。应该就是父组件生成一个 fieldstore 原来存储子组件的表单字段,生成一个注册方法给子组件注册,然后监听 onchange 事件。
    leoyzh97
        2
    leoyzh97  
       2020-11-22 21:35:36 +08:00 via Android
    这不就是受控组件嘛,可以看看 antd form 表单的实现。应该就是父组件生成一个 fieldstore 原来存储子组件的表单字段,生成一个注册方法给子组件注册,然后监听 onchange 事件。
    azcvcza
        3
    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
        4
    awefeng  
       2020-11-23 10:48:39 +08:00
    父组件给个监听给子组件就好了 固定一下范式
    susunus
        5
    susunus  
       2020-11-23 12:43:31 +08:00 via iPhone
    usecallback 这个从父组件传给自组件
    ljpCN
        6
    ljpCN  
       2020-11-23 13:11:01 +08:00 via Android
    最简单的方式是子组件不要保存状态,状态提升到父组件
    park4ce666
        7
    park4ce666  
    OP
       2020-11-23 14:32:01 +08:00 via iPhone
    收到并阅读了大家的想法和意见后,我打算试一下给父级组件创建一个 use Context 的钩子,然后子组件通过 Context 和父级共享状态,这么写,每一次应用组件的时候可能要根据子组件的数量和对应的字段属性在父级手动先预设好,感觉还是有些死板,目前我的脑子只够写到这一步了,不知道还能否优化到自动适配子组件。
    KuroNekoFan
        8
    KuroNekoFan  
       2020-11-23 14:41:36 +08:00
    需要导出状态变化的组件可以提供一个 props, onCompStateChange,调用方 /父组件通过传入一个函数就可以拿到其状态变化了
    子组件不保存状态不是一个好做法,该有本地状态就应该有本地状态
    justsosososo
        9
    justsosososo  
       2020-11-23 16:01:42 +08:00
    hook 只是用来简写的新特性 该 props 还是得 props 不要被这些概念混淆了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2550 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:39 PVG 22:39 LAX 06:39 JFK 09:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86