javascript - 为什么在 React useReducer 简单的 Todo 应用程序中我得到“一个组件正在改变一个未定义类型的不受控制的输入来控制..”?
问题描述
组件正在更改类型为 undefined 的非受控输入以进行控制。输入元素不应从不受控切换到受控(反之亦然)。决定在组件的生命周期内使用受控输入元素还是不受控输入元素
function reducer(state, action) {
switch (action.type) {
case "add":
return {
todos: [...state.todos, { text: action.text, completed: false }]
};
case "toggle":
return {
todos: state.todos.map((t, idx) =>
idx === action.idx ? { ...t, completed: !t.completed } : t
)
};
default:
return state;
const App = () => {
const [{ todos, todoCount }, dispatch] = useReducer(reducer, {
todos: []
});
const [text, setText] = useState();
return (
<div>
{todos.map((t, idx) => (
<div
key={t.text}
onClick={() => dispatch({ type: "toggle", idx })}
}
>
{t.text}
</div>
<div>
)
解决方案
改变这一行 -
const [text, setText] = useState();
至 -
const [text, setText] = useState("");
然后它应该工作。
请参阅此链接以获得正确的解释。
推荐阅读
- rcpp - 访问列表列表中的元素 (Rccp)
- vue.js - 特定 node_module 的 Webpack 别名“@”
- java - 将xml转换为json时如何区分字符串“null”和null值?
- terraform - Terraform 通过命令行启用特定的虚拟机
- django - 使用 Django 表单集创建用户列表页面并在用户列表页面中显示个人资料图像
- asp.net - 在 .NET Framework 4.7.2 中使用多个环境
- node.js - RabbitMQ 队列未被多个消费者服务并行消费
- r - “非强连通图”在 centiserve 质心计算中是什么意思?
- ios - 如何为 UICollectionView 创建 ContextMenu
- microsoft-graph-api - 如何确定调用者是否有权使用 MSGraph API 编辑 OneDrive 文件