reactjs 错误 - onChange 不是函数错误

时间:2021-07-02 01:02:24

标签: reactjs react-hooks codesandbox react-forms

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

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

3 个答案:

答案 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 个小的更改即可使输入正常工作:

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

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

  1. 将您的输入 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 */ }

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