reactjs错误-onChange不是函数错误

Posted

技术标签:

【中文标题】reactjs错误-onChange不是函数错误【英文标题】:reactjs error - onChange is not a function error 【发布时间】: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 函数,但您从未声明过它。你到底想对输入值做什么? 【参考方案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 处小改动即可使输入正常工作:

    声明另一个状态变量:

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

    将输入的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/

【讨论】:

以上是关于reactjs错误-onChange不是函数错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ReactJS 中的单个函数处理表单字段中的错误?

当从数组呈现ReactJS组件时,组件的onChange函数将传递最后一个参数值

TypeError: u.indexOf 不是 Reactjs 和 Firebase 的函数

ReactJS toLowerCase 不是一个函数

ref 不是函数,firebase 存储图片上传,reactJS

TypeError:window.intlTelInput 不是 reactjs 中的函数