【问题标题】:Mark checkbox completed - React标记复选框已完成 - 反应
【发布时间】:2019-01-09 00:03:56
【问题描述】:

首先,我是 React 新手。

我正在尝试构建一个待办事项列表应用程序,只是为了练习。

有一个待办事项列表(带有标题、复选框、 并且名为 'completed' 的属性默认为 false。)

逻辑很简单,当completed属性变为true时,item就会得到一个line-through样式。

我的问题是:

当我标记第一个待办事项时,问题就来了,一切正常。 然后当我转到第二项并尝试标记他时,应用程序会中断。

my code:


class App extends Component {
  constructor() {
    super()
    this.state = {
      todos: [],
      userType: ""
    }
    this.inputEvent = this.inputEvent.bind(this)
    this.submitEvent = this.submitEvent.bind(this)
  }

  checkMark = (id) => {
    this.setState(oldState => {
      const newTodo = oldState.todos.map(x => {
        if (x.id === id) {
          x.completed = !x.completed
          return x
        }
        console.log(newTodo)
        return newTodo
      })
      return {
        todos: newTodo
      }
    })
  }

【问题讨论】:

  • 应用程序以什么方式中断?
  • TypeError: 无法读取未定义的属性“id”
  • 你怎么打电话给checkMark
  • checkMark 是一个 onChange 事件 this.props.checkMark(this.props.id)} type="checkbox" checked={this.props.completed} / >

标签: javascript reactjs


【解决方案1】:

您在此处未定义的地图中返回 newTodo

试试看

  checkMark = (id) => {
    this.setState(oldState => {
      const newTodo = oldState.todos.map(x => {
        if (x.id === id) {
          x.completed = !x.completed
          return x
        }
        return x
      })
      return {
        todos: newTodo
      }
    })
  }

【讨论】:

  • 谢谢 :) !
  • 顺便说一句,有没有其他方法(更熟练地编写这段代码?),只是想知道。
猜你喜欢
  • 2013-08-06
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2018-11-19
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多