我创建了一个包含文件输入和文本字段的字段数组。一切似乎都正常,但是当我尝试上传小图像或在文本字段中键入内容时,会弹出一个类型错误并显示“onChange 不是函数”消息。如何修复此错误?
我已经将代码上传到了codesandbox: https://codesandbox.io/s/cool-wildflower-6jlcl?file=/src/App.js
答案 0 :(得分:0)
好吧,首先您不能将函数命名为 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
}
/>
我觉得应该可以
答案 1 :(得分:0)
您正在调用 onChange
函数,但您从未声明过它。
1.输入框
据我所知,您只需要做 2 个小的更改即可使输入正常工作:
const [input, setInput] = useState("");
onChange
参数更改为:onChange="event => 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/
答案 2 :(得分:0)
您的整个代码按预期工作,错误是因为未声明 onChange
函数。您期望从 Controller
组件的 render prop 获得它,但您没有以正确的方式获得它。
第 71 行
render={({ onChange }) => /** rest */ }
应该
render={({ field: { onChange } }) => /** rest */ }