我正在使用React实现添加到收藏夹的功能。在大家的帮助下,我已经成功实现了这个功能,但是无法切换喜欢和不喜欢。我编写的代码是"likes: this.state.likes.filter(e => e.name !== person.name)",因为有人建议我这样编码。说实话,我不理解上面的代码,可能是因为它是ES6语法。在ES5中,它是什么样子的呢?而且现在这段代码不起作用,元素没有正确地添加到数组中。我该如何修复这段代码呢?最初的回答:我建议你先了解ES6语法中的箭头函数和filter方法。箭头函数用于简化函数的书写方式,而filter方法可以根据指定的条件过滤数组中的元素。在ES5中,可以使用普通的函数和for循环来实现相同的功能。关于代码不起作用的问题,你需要检查一下传入filter方法的参数是否正确,以及是否正确地更新了state中的likes数组。
import React from 'react';
import axios from 'axios';
import IcoMoon from 'react-icomoon';
export default class PersonList extends React.Component {
state = {
persons: [],
likes: []
}
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const persons = res.data;
this.setState({ persons });
})
}
handleClick = person => {
if (this.state.likes.filter(e => e.name === person.name).length > 0) {
this.setState({
likes: this.state.likes.filter(e => e.name !== person.name)
});
console.log(this.state.likes);
return;
}
this.setState({
likes: [...this.state.likes, person]
});
};
likesTemplate = item => <li key={item}>{item}</li>;
renderLikes = () => {
return this.state.likes.map(i => this.likesTemplate(i));
}
render() {
return (
<div>
{this.state.persons.map(person => {
return <li key={person.name}><IcoMoon icon="heart" onClick={() => {this.handleClick(person.name)}} />{person.name}</li>}
)}
<h2>Favorite Person</h2>
<ul>
{this.renderLikes()}
</ul>
</div>
)
}
}