【发布时间】:2020-07-26 02:20:51
【问题描述】:
我有一个表单,我想在function onSubmit() 内的组件AddList() 中调用一个钩子function usePostAddList()。基本上usePostAddList() 是发出POST 请求。
这是AddList()的代码:
AddList.jsx
export default function AddList() {
..
..
const onSubmit = (e) => {
e.preventDefault()
const data = [
{
komoditas,
areaKota,
areaProvinsi,
price,
tglParsed,
},
]
// I called it here and it show an error
usePostAddList(data)
}
..
..
}
reducer/index.js
export function usePostAddList(data) {
const [state, dispatch] = React.useReducer(reducer, initState)
React.useEffect(() => {
dispatch({ type: ACTIONS.MAKE_REQUEST })
store
.append("Sheet2", data)
.then((res) =>
dispatch({
type: ACTIONS.ADD_LIST,
payload: res,
})
)
.catch((e) => {
return dispatch({
type: ACTIONS.GET_ERRORS,
payload: e,
})
})
}, [])
return state
}
我已经阅读了很多解决方案,例如我必须在函数名称中写“use”,将函数AddList大写,但仍然出现此错误:
React Hook "usePostAddList" is called in function "onSubmit" which is neither a React function component or a custom React Hook function
但如果我像下面的代码一样调用usePostAddList(),它会起作用:
AddList.jsx
export default function AddList() {
const { lists, loading, errors } = usePostAddList("test")
return (
...
)
}
但这并没有解决我的问题
【问题讨论】:
-
你的道具在哪里?
-
你这是什么意思?
-
错误是什么?钩子的规则之一是它们必须在组件的顶层调用,所以我怀疑这就是为什么
usePostAddList()在你的第二个示例中不会出错,但是当它嵌套在 onSubmit 内时它会出错。 -
那我该怎么办?我不能在函数内调用
useReducer? -
您是否在 AddList 文件中导入 React?
标签: javascript reactjs use-reducer