Причина, по которой при первом нажатии кнопки печать журнала консоли не определена, заключается в том, что setState является асинхронным. Таким образом, он напрямую печатает состояние, не ожидая завершения процесса setState, если вы хотите увидеть последнее состояние послеsetState Finish, вам нужно поместить console.log в функцию ..
add = (item) => {
this.setState({
friendsInComp: [...this.state.friends, item ]},
() => { console.log('this.state.friend', this.state.friendsInComp) }
)
}
и просто отметим, что когда вы сделали [...this.state.friends, item ]
, он только добавляет исходное состояние друзей с новым элементом, который нажимает пользователь, таким образом, он не продолжает добавлять, чтобы отслеживать, чтопользовательский клик.Если вам нужно обновлять состояние, чтобы отслеживать клик пользователя.Вы можете сделать что-то вроде этого.
add = (item) => {
const { friendsInComp } = this.state;
this.setState({
friendsInComp: !friendsInComp ? [...this.state.friends, item ] : [...friendsInComp, item]},
() => { console.log('this.state.friend', this.state.friendsInComp) }
)
}
используйте !friendsInComp
, если вы не определяете friendsInComp как пустой массив внутри конструктора.в противном случае используйте friendsInComp.length == 0
надеюсь, эта помощь.