【发布时间】:2021-09-05 17:35:25
【问题描述】:
我有一个功能组件,它有一个输入字段,用户在该输入字段中输入问题并按 Enter,然后我将查询发送到后端。
这里是功能组件的简化版
UserQuery.js
import {postQuery} from '../actions/postQueryAction'
const UserQuery = () => {
const [name, setName] = useState("")
function sendMessage(userQuery) {
postUserQuery(userQuery)
}
return (
<>
<input
type="text"
value={name}
onChange={e => setName(e.target.value)}
onKeyPress={sendMessage}
id="userQuery"
/>
</>
)
}
export default UserQuery
如您所见,我有一个名为 postQuery 的回调,它实际上发出 axios 请求并发布用户查询。这是它的样子
postQueryAction.js
export const postQuery = (userQuery) => async dispatch => {
let userInfo = useSelector(state => state.userInfo.data)
const username = userInfo.username
const group = userInfo.group
const headers = {
'Content-Type': 'application/json;charset=UTF-8',
}
const params = {
group: group,
user: username,
data: userQuery
}
await axios.post(`/postQuestion`,params, {headers}, {
}).then(response => {
console.log("response check", response.data);
})
.catch(err => {
console.log("Error log", err);
});
}
但我收到Invalid hook call 错误。如果我删除 useSelector 代码,它不会抱怨并且请求会通过。
我可以在原始功能组件 (UserQuery.js) 中使用useSelector 并相应地传递参数。但我希望postQuery 方法只接受userQuery 参数并从redux 状态中获取其他信息。
我该怎么办?
【问题讨论】:
-
嗨,雷,我的回答对你有帮助吗?如果这种方法不起作用,我很乐意寻找另一种方法
标签: reactjs async-await axios