第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查復選框在 React 中不起作用

檢查復選框在 React 中不起作用

蕪湖不蕪 2022-10-27 14:17:29
這是 react 中一個簡單的 TO-DO 應用程序,它從中App.js獲取數據,TodosData.js列表與組件一起顯示TodoItem.js?,F在可以在渲染時查看復選框和數據。但是當我點擊復選框時它不起作用。我嘗試handleChange了似乎有效的控制臺日志記錄功能。似乎handleChange函數內部可能存在我無法弄清楚的問題。我正在關注 YT 上的 freecodecamp 教程,我也檢查了幾次,但在這里找不到問題。App.js代碼:import React from 'react';import TodoItem from './TodoItem'import todosData from './todosData'class App extends React.Component {  constructor() {    super ()    this.state = { todos: todosData }    this.handleChange = this.handleChange.bind(this)  }  handleChange(id) {    this.setState(prevState => {      const updatedTodos = prevState.todos.map(todo => {        if (todo.id === id) {          todo.completed = !todo.completed        }        return todo      })      return {        todos: updatedTodos      }    })  }  render() {    const todoItems = this.state.todos.map(itemEach => <TodoItem key = {itemEach.id} itemEach = {itemEach}      handleChange = {this.handleChange} />)    return (      <div className = "todo-list">        {todoItems}      </div>    )  }}export default App;TodoItem.js代碼:import React from 'react';function TodoItem(props) {  return(    <div className = "todo-item">      <input type = "checkbox"        checked={props.itemEach.completed}        onChange={() => props.handleChange(props.itemEach.id)}      />      <p>{props.itemEach.text}</p>    </div>  )}export default TodoItemTodosData.js代碼:const todosData = [  {    id: 1,    text: "Take out the trash",    completed: true  },  {    id: 2,    text: "Grocery shopping",    completed: false  },  {    id: 3,    text: "Clearn gecko tank",    completed: false  },  {    id: 4,    text: "Mow lawn",    completed: true  },  {    id: 5,    text: "Catch up on Arrested Development",    completed: false  }]export default todosData有沒有更好的方法來實現這一點?對于像我這樣的初學者來說,這種做復選框的方式似乎相當復雜。另外我該如何改進這段代碼?
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

您正在改變handleChange函數中的狀態(tài)。因此它得到了prevState兩次。一次用于原始先前狀態(tài),接下來用于您在handleChange.


todo通過像這樣傳播 from 狀態(tài),您可能會丟失參考。


this.setState(prevState => {

  const updatedTodos = prevState.todos.map(todo => {

    const resTodo = { ...todo };

    if (todo.id === id) {

      resTodo.completed = !resTodo.completed;

    }

    return resTodo;

  });

  return {

    todos: updatedTodos

  };

});

這是一個有效的代碼框


查看完整回答
反對 回復 2022-10-27
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號