【问题标题】:reactjs error - onChange is not a function errorreactjs错误-onChange不是函数错误
【发布时间】:2021-09-14 00:16:45
【问题描述】:

我创建了一个包含文件输入和文本字段的字段数组。一切似乎都很好,但是当我尝试上传小图像或在文本字段中输入内容时,会弹出一个类型错误,并显示“onChange 不是函数”消息。如何解决此错误?

我已将代码上传到代码沙箱: https://codesandbox.io/s/cool-wildflower-6jlcl?file=/src/App.js

【问题讨论】:

  • <input ... onChange={(event)=> onChange({text:event.target.value})}/> 您正在调用 onChange 函数,但您从未声明过它。你到底想对输入值做什么?

标签: reactjs react-hooks codesandbox react-forms


【解决方案1】:

您的整个代码按预期工作,错误是因为 onChange 函数未声明。您期望从 Controller 组件的 render prop 获得它,但您没有以正确的方式获得它。

第 71 行

render={({ onChange }) => /** rest */ }

应该是

render={({ field: { onChange } }) => /** rest */ }

你可以看到an example of how this is done in react hook form docs

【讨论】:

    【解决方案2】:

    好吧,首先您不能将函数命名为 onChange,因为默认的 onChange 已经定义,其次您从未定义过该函数。

      const handleChange = (value) => console.log("onchange ", value);
    
    

    然后

    <Controller
                      control={control}
                      name={`files.${index}.description`}
                      render={({ onChange }) => (
                        <input
                          style={{ border: "1px solid blue" }}
                          placeholder={"describe your file here"}
                          onChange={(event) =>
                            handleChange({ text: event.target.value }) // calling the handleChange function
                          }
                        />
    
    

    我觉得应该可以

    【讨论】:

      【解决方案3】:

      您正在调用onChange 函数,但您从未声明它。

      1.输入字段

      据我所知,您只需做 2 处小改动即可使输入正常工作:

      1. 声明另一个状态变量:

      const [input, setInput] = useState("");

      1. 将输入的onChange 参数更改为:

      onChange="event =&gt; setInput(event.target.value)"

      这应该使文本输入工作。

      2。文件输入字段

      对于文件输入,请务必阅读this

      因为它的值是只读的,所以它在 React 中是一个不受控制的组件。 [...] 您应该使用 File API 与文件进行交互。

      更多文档: https://reactjs.org/docs/forms.html#controlled-components

      Forms as functional components with react

      https://rangle.io/blog/simplifying-controlled-inputs-with-hooks/

      【讨论】:

        猜你喜欢
        • 2016-06-05
        • 2021-04-06
        • 2021-06-01
        • 1970-01-01
        • 2022-08-05
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多