我最近一直在学习react js,这里有这段代码,我的导师在其中使用此代码重置状态下的值...
handleDelete = counterId => {
const tempCounter = this.state.counters.filter(c => c.id !== counterId);
this.setState({ counters: tempCounter });
};
reset = () => {
const resetCounters = this.state.counters.map(c => {
c.value = 0;
return c;
});
this.setState({ counters: resetCounters });
};
在'handleDelete'函数中,我的家庭教师没有在'tempCounter'变量中返回值,但是在'reset'函数中家庭教师返回了'c'的值,为什么?
答案 0 :(得分:2)
this.state.counter.filter()
内的箭头函数返回表达式c.id !== counterId
的布尔值。
当您在声明箭头功能后不加括号“ {}”时,表示箭头“ =>”之后的内容被视为其返回值。
答案 1 :(得分:0)
此功能:
handleDelete = counterId => {
const tempCounter = this.state.counters.filter(c => c.id !== counterId); // implicit return
this.setState({ counters: tempCounter });
};
OR
handleDelete = counterId => {
const tempCounter = this.state.counters.filter(c => {
return c.id !== counterId; // explicit return
});
this.setState({ counters: tempCounter });
};
更多人为的例子:
const people = [
{ name: 'Bob', age: 20 },
{ name: 'Jane', age: 30 },
{ name: 'Mike', age: 40 },
{ name: 'Smith', age: 50 },
];
const under35implicit = people.filter(person => person.age < 35)
// same as
const under35explicit = people.filter(person => {
return person.age < 35
})
console.log(under35implicit)
console.log(under35explicit)
这有意义吗?
答案 2 :(得分:0)
在箭头函数中,如果箭头后面有一个表达式,它将被隐式返回。如果有花括号,则需要显式的return语句来返回值。您可以将第一个函数重写为:
const tempCounter = this.state.counters.filter(c => {
return c.id !== counterId
});
但是第一种方法更简洁。
第二个函数也可以颠倒以使用显式返回,使用扩展:
const resetCounters = this.state.counters.map(c => ({ ...c, value: 0 }));
我们需要将对象包装在括号中,否则它将变成花括号中包含的函数主体。
答案 3 :(得分:0)
仔细观察!返回值c
不是函数reset
的返回值,而是函数c => { c.value = 0; return c; }
的返回值,您在this.state.counters.map
中将其用作参数。>
对此进行了澄清,函数reset
和handleDelete
均未返回任何值。它们甚至不必,因为它们很可能用作事件处理程序(单击按钮等)。因此,它们自己通过this.setState
触发状态更改。