我是reactjs的新手,并试图制作一个组件。我在error[E0507]: cannot move out of borrowed content
中设置了this.state
,然后调用了一个方法:
componentWillMount()
但是在我的方法componentWillMount() {
this.setState({ value: this.props.value || "0" });
this.changeCbState = this.changeCbState.bind(this);
this.changeCbState();
}
changeCBState
中未定义:
this.state
错误:changeCbState() {
console.log(this.state.value)
}
答案 0 :(得分:4)
问题可能是您在构造函数中没有初始化状态,并且由于this.setState是异步的,因此在尝试访问changeCbState
函数之前,可能不会初始化状态。
由于应该弃用componentWillMount
方法,因此您在constructor
生命周期中编写的初始化代码也需要放入componentWillMount
中。
constructor(props) {
super(props);
this.state = {
value: this.props.value || "0"
}
this.changeCbState = this.changeCbState.bind(this);
this.changeCbState();
}
答案 1 :(得分:3)
您可能没有在构造函数中定义状态。使用构造函数在类实例上绑定方法并定义状态
class Something extends React.Component {
constructor(props) {
super(props)
this.state = { value: props.value || '0' }
this.changeCbState = this.changeCbState.bind(this);
}
componentWillMount() {
this.changeCbState();
}
changeCbState() {
console.log(this.state.value)
}
}
答案 2 :(得分:0)
setState
以异步方式工作。这意味着在调用setState
this.state
之后,变量不会立即更改。因此,您应该使用回调函数在setState
之后进行操作。
最好在构造函数中定义this.state
。
答案 3 :(得分:0)
在componentWillMount
中设置状态被认为是反模式。看看这个资源https://vasanthk.gitbooks.io/react-bits/anti-patterns/04.setState-in-componentWillMount.html。
将状态设置为null
的原因是因为您之前没有定义值,并且setState
是异步操作。
您必须将初始状态设置如下:
class Mycomponent extends Component {
constructor(super) {
super(props);
this.state = {
value: this.props.value || "0",
};
}
}
答案 4 :(得分:0)
这个问题有很多不同的答案,但是我的简单优雅的最爱答案是在定义此类功能时使用箭头功能。
class Something extends React.Component {
constructor(props) {
super(props)
this.state = { value: props.value || '0' }
}
changeCbState = () => {
console.log(this.state.value)
}
componentWillMount() {
this.changeCbState();
}
}
如果您想进一步了解JS中的binding
这个问题。阅读this