我在youtube上参加了JS速成班-2019年,我没能找到以下问题的答案。
父组件中的方法上下文未被子绑定调用覆盖的原因。
代码库可以在这里找到,todo
但是为了简化这个问题,这里有一个小的代码片段。
父级
class App extends Component {
  state = {
    todos: []
  }
  // Toggle Complete
  markComplete = (id) => {
    this.setState({ todos: this.state.todos.map(todo => {
      if(todo.id === id) {
        todo.completed = !todo.completed
      }
      return todo;
    }) });
  }
  render() {
    return (
        <TodoItem markComplete={this.markComplete}  />
    );
  }
}孩子
export class TodoItem extends Component {
  render() {
    const { id, title } = this.props.todo;
    return (
        <input type="checkbox" onChange={this.props.markComplete.bind(this, id)} /> {' '}
    )
  }
}根据我对bind objects/Function/bind的理解,我希望当标记markComplete被调用时,"this“将是子上下文,但它仍然是父上下文。
  markComplete = (id) => {
    this.setState({ todos: this.state.todos.map(todo => {
    ^^^^ why it is not child
      if(todo.id === id) {
        todo.completed = !todo.completed
      }
      return todo;
    }) });
  }我确实理解公共类字段的语法。
发布于 2019-08-12 09:28:14
由于MDN在其文档中没有提到这一点,这里是到ECMASript的官方链接,这说明了这种情况。
https://www.ecma-international.org/ecma-262/6.0/#sec-function.prototype.bind
注意-> 注2
如果目标是箭头函数或绑定函数,那么传递给该方法的thisArg将不会被随后调用F.使用。
https://stackoverflow.com/questions/56495200
复制相似问题