【问题标题】:How to emit an even from react hook component in typescript?如何从打字稿中的反应钩子组件发出偶数?
【发布时间】:2020-12-30 15:43:48
【问题描述】:

我有一个类似的组件:

<div>
<button onClick={add_input_list()}>add</botton>
<ul>
<li>
<input type="text" value={value} onChange={somefunction}/>
</li>
<li>
<input type="text" value= {value} onChange={somefunction}/>
</li>
</ul>
</div>

我只想将此组件作为子组件,它可以将此输入 onChange 事件作为 onChange 事件发送到外部。

但是 or 组件没有 onChange 事件。如何添加它? 我需要潜水组件有 onChange 事件 emmit。如果输入有 onChange 事件,div 会在外面发出 onChange 事件。

完整的代码类似于:

https://codesandbox.io/s/formik-codesandbox-template-forked-0hrdu?file=/index.js

【问题讨论】:

    标签: reactjs typescript react-hooks eventemitter


    【解决方案1】:

    由于您需要输入列表,因此这里是更新后的代码。 Stackblitz 示例也已更新:

    import React, { Component } from "react";
    import { render } from "react-dom";
    
    const App = () => {
      const handleChange = inputListState => {
        console.log("Input list state = ", inputListState);
      };
      return <MyInputList onChange={handleChange} />;
    };
    
    const MyInputList = ({ onChange }) => {
      const [state, setState] = React.useState();
      
      // When state changes, emit the value to the parent
      React.useEffect(() => {
        onChange(state);
      }, [state]);
      
      const editState = e => {
        setState({ ...state, [e.target.name]: e.target.value });
      }
      return (
        <ul>
          <li>
            <input name="input1" type="text" onChange={editState} />
          </li>
          <li>
            <input name="input2" type="text" onChange={editState} />
          </li>
          <li>
            <input name="input3" type="text" onChange={editState} />
          </li>
        </ul>
      );
    };
    
    render(<App />, document.getElementById("root"));
    

    这里是the repro on Stackblitz

    您只需将父组件的一个方法作为 prop 传递给子组件,然后在输入的 onChange 事件中使用它。

    [编辑]:对于输入列表,它的工作原理相同,但您只需要构建一个包含不同输入状态的对象,然后才能发出您的值。

    【讨论】:

    • 嗨,实际上,我需要输入列表,所以我想要的是
      ,但 ul 组件没有 on change 事件。 @Quentin Grisel
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2023-01-09
    • 2021-01-03
    相关资源
    最近更新 更多