reactjs - 用 connect() 反应 Redux 表单?
问题描述
我正在尝试使用 connect() 而不是 useSelector 和 useDispatch 来构建一个 react redux 表单。我设法显示数据列表并重置表格。但我没有设法发送数据。这是代码:
Reducer.js
const initialState = {
tasks: {
name: "",
age: "",
job: "",
},
list: [
{
id: 0,
name: "Maillard",
age: 35,
job: "soldier",
},
],
};
export const toDoReducer = (state = initialState, action) => {
switch (action.type) {
case "name":
return {
...state,
tasks: {
name: action.payload,
},
};
case "age":
return {
...state,
tasks: {
age: action.payload,
},
};
case "job":
return {
...state,
tasks: {
job: action.payload,
},
};
case "clear":
return {
...state,
tasks: {
name: "",
age: "",
job: "",
},
};
case "add":
return {
...state,
tasks: {
...state.tasks,
id: state.list.length + 1,
},
};
default:
return {
...state,
};
}
};
export default toDoReducer;
import React from "react";
import { connect } from "react-redux";
import {
setName,
setAge,
setJob,
clearForm,
addForm,
} from "../../redux/action";
export const Form = (props) => {
return (
<div>
Name
<input value={props.list.name} onChange={(e) => { props.Name(e.target.value) }} />
Age
<input value={props.list.age} onChange={(e) => { props.Age(e.target.value) }} />
Profession
<input value={props.list.job} onChange={(e) => { props.Job(e.target.value) }} />
<div style={{ padding: 20 }}>
<button onClick={props.Clear}>Reset</button>
<button onClick={props.Add}>Envoyer</button>
</div>
</div>
);
};
const mapDispatchToProps = (dispatch) => {
return {
Name: () => {
dispatch({
type: "name",
setName,
});
},
Age: () => {
dispatch({ type: "age", setAge });
},
Job: () => {
dispatch({
type: "job",
setJob,
});
},
Clear: () => {
dispatch({ type: "clear", clearForm, });
},
Add: () => {
dispatch({)}
// My problem comes from the Add
<!-- begin snippet: js hide: false console: true babel: false -->
type: "add",
addForm
})
}
};
};
const mapStateToProps = (state) => ({
list: state.tasks,
});
export default connect(mapStateToProps, mapDispatchToProps)(Form);
// export default Form;
我的问题来自于 mapDispatchToProps,我不知道如何为函数添加
解决方案
您的操作应该是定义操作的操作type
,您应该在 中调用它们mapDispatchToProps
,而不是将它们作为操作的一部分传递。
所以你addForm
应该是这样的
const addForm = () => ({
type:'add'
});
在你的mapDispatchToProps
应该是这样的
Add: () => dispatch(addForm()),
但是你所有的调度都有同样的问题
例如Name
应该是
行动
const setName = (payload) => ({
type:'name',
payload
});
mapDispatchToProps
Name: (nameValue) => {
dispatch(setName(nameValue));
},
推荐阅读
- javascript - 如何使用 Google Maps API 修复“超出查询限制”错误
- javascript - 地理服务器到 openlayers wfst
- android - 如何向适配器添加时间戳
- c++ - 如何从非递归版本定义斐波那契函数?
- bash - 循环通过首选无线网络进行删除
- javascript - 使用 javascript 提交 HTML 表单,但通过 ajax 发送
- java - 如何在字符串中找到最长的偶数单词
- android - 使用 Ionic,我如何检测呼叫何时断开?
- mechanicalturk - 你能在没有报酬(也没有支付亚马逊)的情况下完成自己的 Mechanical Turk 任务吗?
- html - 当网站切换到移动视图时如何摆脱一些间距