componentDidMount 中的 setState
setState inside componentDidMount
我正在尝试等待 componentDidMount
中的数据,然后将我的状态 isLoading
更改为 false,但 setState
未触发。我可以 console.log branch.init
中的数据,但我不知道为什么 setState
不起作用。
state = {
isLoading: true,
}
componentDidMount() {
console.log("componentDidMount");
let branchKeyTest = 'key_test_aBcDeF'
branch.init(branchKeyTest, function(err, data) {
console.log(JSON.stringify(data, null, 1))
this.setState({ isLoading: false })
if (data && data.data_parsed) {
switch (data.data_parsed.link_type) {
case 'new_release':
localStorage.setItem('redirect', JSON.stringify({
'link_type': 'new_release',
'release_id': data.data_parsed.release_id
}));
break;
default:
console.log("do nothing")
}
}
})
}
render() {
const { isLoading } = this.state;
if (!isLoading) {
return (
<div>Done Loading</div>
)
else {
return (
<div>Still Loading</div>
)
}
}
branch.init(branchKeyTest, function(err, data) {
需要更改为 branch.init(branchKeyTest, (err, data) => {
,因为您无权访问匿名函数内的 class 的 this
关键字。
按照您的编写方式,您无权访问 this
,因为 this
指的是函数的上下文 - 而不是 class。通过将其更改为粗箭头语法,您可以访问 this
以获取 React class 的上下文。
您可以阅读有关 this here 的更多信息。
我正在尝试等待 componentDidMount
中的数据,然后将我的状态 isLoading
更改为 false,但 setState
未触发。我可以 console.log branch.init
中的数据,但我不知道为什么 setState
不起作用。
state = {
isLoading: true,
}
componentDidMount() {
console.log("componentDidMount");
let branchKeyTest = 'key_test_aBcDeF'
branch.init(branchKeyTest, function(err, data) {
console.log(JSON.stringify(data, null, 1))
this.setState({ isLoading: false })
if (data && data.data_parsed) {
switch (data.data_parsed.link_type) {
case 'new_release':
localStorage.setItem('redirect', JSON.stringify({
'link_type': 'new_release',
'release_id': data.data_parsed.release_id
}));
break;
default:
console.log("do nothing")
}
}
})
}
render() {
const { isLoading } = this.state;
if (!isLoading) {
return (
<div>Done Loading</div>
)
else {
return (
<div>Still Loading</div>
)
}
}
branch.init(branchKeyTest, function(err, data) {
需要更改为 branch.init(branchKeyTest, (err, data) => {
,因为您无权访问匿名函数内的 class 的 this
关键字。
按照您的编写方式,您无权访问 this
,因为 this
指的是函数的上下文 - 而不是 class。通过将其更改为粗箭头语法,您可以访问 this
以获取 React class 的上下文。
您可以阅读有关 this here 的更多信息。