当前位置: 首页 > 知识库问答 >
问题:

为什么在React useReducer simple Todo应用程序中我得到“一个组件正在将未定义类型的非受控输入更改为受控..”?[副本]

凌展
2023-03-14

组件正在将未定义类型的非受控输入更改为受控输入。输入元件不应从非受控切换到受控(反之亦然)。决定在组件的使用寿命内使用受控或非受控输入元件

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>
)

共有1个答案

赵涵亮
2023-03-14

换行-

const [text, setText] = useState();

到-

const [text, setText] = useState("");

那么它应该会起作用。

有关正确的说明,请参阅此链接。

 类似资料:
  • 我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码:

  • 我正在对我的组件进行排序 我在选择标记中有一个错误。获取错误props.filters.sortby的值最初是日期。当我试图从下拉列表中更改它时,错误发生了。

  • 我有一个页面,我从服务器上获取数据,并为受控输入设置状态值。(例如,我有一个值为的输入,我从服务器上获取名称(例如Dave)并将其设置为name,因此输入值为Dave。它可以工作,但我遇到了对象数组的问题。) 所以这就是状态 这就是我如何使用 但这会导致此错误:

  • 使用ui textfield时出错 警告:TextField正在将text类型的受控输入更改为不受控。输入元素不应从受控切换到非受控(或反之亦然)。决定在组件的生存期内使用受控还是不受控输入元素

  • 由另一个控制器控制的用户表单在控制台上抱怨“警告:一个组件正在将一个不受控的输入改变为受控的。这可能是由于值从未定义的值更改为已定义的值而导致的,这是不应该发生的。决定在组件的生命周期内使用受控还是不受控的输入元素。更多信息:https://reactjs.org/link/controlled-components输入跨度li ul ... " 这是组件代码: 我尝试了其他stackoverfl

  • 我得到了这个错误,我是新的反应。我看过其他帖子,但仍然不能解决这个问题。我们将不胜感激。谢谢 警告:组件正在更改要控制的电子邮件类型的未控制输入。输入元素不应该从不受控制切换到受控制(反之亦然)。决定在组件的生存期内使用受控还是不受控的输入元素。更多信息在输入(由编辑创建)中,在div(由编辑创建)中,在div(由编辑创建)中,在窗体(由编辑创建)中,在div(由编辑创建)中