【问题标题】:How to create dynamically a Hook in React?如何在 React 中动态创建 Hook?
【发布时间】:2020-02-17 11:36:12
【问题描述】:

我知道我要说的可能是不可能的,但我想用函数组件做一些事情,就像我在 React 中使用类组件所做的那样,

使用类组件,您可以这样做:

handleChange = (e) => {
  this.setState({
    [e.target.name]: e.target.value
  });
}

this.state."e.target.name" 是使用 e.target.name 的值动态创建的,

但是如何在功能组件(钩子)中,根据输入名称的值动态设置钩子?

会是这样的(不要大喊大叫,我知道这做不到 :D):

function handleChange(e) {
  set`${e.target.name.toUpperCase()`(e.target.value);
}

我知道有 99% 的人告诉我“这是不可能的”,但我真的很想确定,

谢谢

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    这与hooks 本身无关,更多的是关于你如何定义你的state。您可以像这样使用useState 重现您想要的行为

    const Component = () =>{
        const [state, setState] = useState({})
    
        const onChange = e =>{
            const { target: {value, name } } = e
    
            setState(prev =>({
                ...prev,
                [name] : value
            }))
        }
    
    } 
    

    现在如果state[name]undefined,则添加一个新属性,如果state[name] 已经定义,则覆盖旧的value

    【讨论】:

    • 这是我第一次在“setState”之后看到“prev =>”,是否需要这样做?因为我没用过这个
    • 如果你想保留旧的属性。现在state 是一个对象,onChange 只改变了state 的一个属性,其他的必须保持不变
    • @Versifiction 这就是在批量更新状态时应该如何更新状态。
    • 这个解决方案非常棒!
    • 这真的很有帮助,谢谢
    猜你喜欢
    • 2018-01-02
    • 2018-05-01
    • 1970-01-01
    • 2020-11-15
    • 2021-10-09
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多