我刚开始学习React和JavaScript 在完成本教程的过程中,我得到了一个组件的示例代码,它创建了一个切换按钮 这是代码的一部分:
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {isToggleOn: true};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(prevState => ({ // prevState?
isToggleOn: !prevState.isToggleOn
}));
}
在这里困扰我的两件事:
prevState
论证来自哪里?var prevState = this.state;
之类的东西,但仍然有效。arg => { statement; }
语法不能在这里工作?抱歉新手问题......
答案 0 :(得分:31)
prevState
由React和props
提供,两者都是可选的。
prevState
重命名为updater
来更改了setState函数文档。回调函数仍然有两个参数;在应用更改时state
和props
。括号允许多行,如果您没有使用括号,则必须使用return
。你可以使用一行,但不需要大括号。
return
语句的情况下返回对象,则必须将其包含在括号中。谢谢@joedotnot抓住这个。所以() => {foo: true}
会抛出一个错误,因为它看起来像一个函数而foo: true
是一个无效的行。要解决此问题,必须看起来像() => ({ foo: true })
答案 1 :(得分:0)
我用这个。 (示例)
const [modal, setModal] = useState(false);
const [dataAction, setDataAction] = useState({name: '', description: ''});
const _handleChangeName = (data) => {
if(data.name)
setDataAction( prevState => ({ ...prevState, name : data.name }));
if(data.description)
setDataAction( prevState => ({ ...prevState, description : data.description }));
};