React Redux - 提交时不会触发操作
React Redux - on submit wont fire action
我试图在 React 中对表单提交触发 Redux 操作,但它什么也没做,也没有显示任何错误。
操作:
export const addLead = (lead) => (dispatch) => {
const url = 'http://localhost:8000/api/leads/'
axios.post(url, lead)
.then(res => {
dispatch({
type: ADD_LEAD,
payload: res.data
});
}).catch(err => console.log(err));
};
减速器:
case "ADD_LEAD":
return {
...state,
leads: [...state, action.payload]
}
这是我的表单组件:
const Form = () => {
const [formData, setFormData] = useState({
name: '',
email: '',
message:''
})
const {name, email, message} = formData;
const onChange = (e) => {
setFormData({...formData, [e.target.name]: e.target.value});
}
const onSubmit = (e) => {
e.preventDefault();
console.log("submit")
const {name, email, message} = formData;
const lead = {name, email, message}
console.log('Leads: ',lead)
addLead(lead)
}
return(
<form onSubmit={onSubmit}>
.... Form ....
</form>
export default connect(null, {addLead})(Form);
如果我在 Redux 开发工具中提交表单,我看不到该操作,也看不到控制台中的任何错误。我可以在 console.log 和 'submit' 的状态中看到正确的数据,因此触发了 onSubmit 函数。知道为什么它不起作用吗?
您需要使用 props 中的 addLead
,这意味着您需要确保从 [=] 的 props
参数中获取它13=]组件:
const Form = ({addLead}) => {
// Component code stays the same
}
重要的是要记住 connect
会将状态 映射到 props 并将调度 映射到 props.
@Nick 是对的,我们没有看到完整的组件代码来判断 addLead
来自哪里。
1- addLead 需要使用从组件 props 消耗的(使用 react-redux connect
高阶函数连接)
2- for async actions
我看到你正在使用一个 thunk,但是当你在 thunk 中调用 axios
时你可能忘记了 return
。
export const addLead = (lead) => (dispatch) => {
const url = 'http://localhost:8000/api/leads/';
return axios.post(url, lead)
.then(res => {
dispatch({
type: ADD_LEAD,
payload: res.data
});
})
.catch(err => console.log(err));
}
我试图在 React 中对表单提交触发 Redux 操作,但它什么也没做,也没有显示任何错误。
操作:
export const addLead = (lead) => (dispatch) => {
const url = 'http://localhost:8000/api/leads/'
axios.post(url, lead)
.then(res => {
dispatch({
type: ADD_LEAD,
payload: res.data
});
}).catch(err => console.log(err));
};
减速器:
case "ADD_LEAD":
return {
...state,
leads: [...state, action.payload]
}
这是我的表单组件:
const Form = () => {
const [formData, setFormData] = useState({
name: '',
email: '',
message:''
})
const {name, email, message} = formData;
const onChange = (e) => {
setFormData({...formData, [e.target.name]: e.target.value});
}
const onSubmit = (e) => {
e.preventDefault();
console.log("submit")
const {name, email, message} = formData;
const lead = {name, email, message}
console.log('Leads: ',lead)
addLead(lead)
}
return(
<form onSubmit={onSubmit}>
.... Form ....
</form>
export default connect(null, {addLead})(Form);
如果我在 Redux 开发工具中提交表单,我看不到该操作,也看不到控制台中的任何错误。我可以在 console.log 和 'submit' 的状态中看到正确的数据,因此触发了 onSubmit 函数。知道为什么它不起作用吗?
您需要使用 props 中的 addLead
,这意味着您需要确保从 [=] 的 props
参数中获取它13=]组件:
const Form = ({addLead}) => {
// Component code stays the same
}
重要的是要记住 connect
会将状态 映射到 props 并将调度 映射到 props.
@Nick 是对的,我们没有看到完整的组件代码来判断 addLead
来自哪里。
1- addLead 需要使用从组件 props 消耗的(使用 react-redux connect
高阶函数连接)
2- for async actions
我看到你正在使用一个 thunk,但是当你在 thunk 中调用 axios
时你可能忘记了 return
。
export const addLead = (lead) => (dispatch) => {
const url = 'http://localhost:8000/api/leads/';
return axios.post(url, lead)
.then(res => {
dispatch({
type: ADD_LEAD,
payload: res.data
});
})
.catch(err => console.log(err));
}