gpt4 book ai didi

javascript - 如何使用 React 映射 Prop 创建新元素

转载 作者:搜寻专家 更新时间:2023-11-01 04:14:19 33 4
gpt4 key购买 nike

我正在尝试使用 React 动态创建元素,但我似乎无法正确使用 this.props 。我目前拥有的不会产生任何新元素。我尝试查看其他各种答案并模仿它们,但没有任何运气。

React.createClass({
getDefaultProps: function() {
var items = [];
chrome.storage.local.get(null, function(result) {
var keys = Object.keys(result);
// get all the keys from chrome storage and add to array items
for (var i = 0; i < keys.length; i++) {
items.push(keys[i]);
}
})
return {
items: items
}
},
render: function() {
// display an element with name of key
return (
<div>
{this.props.items.map(function loop(item, i) {
return (<div>{item}</div>)
})}
</div>
)
}
})

但是,当我用文字数组替换 this.props.items 时,我得到了新元素。知道我在这里遗漏了什么吗?

最佳答案

chrome.storage 是异步的:

It's asynchronous with bulk read and write operations, and therefore faster than the blocking and serial localStorage API.

这意味着 getDefaultProps 在调用返回之前完成,初始状态为 { items: [] }。要解决此问题,请向 'componentDidMount' 中的存储发出请求,并设置数据到达时的状态:

React.createClass({

getDefaultProps: function() {
return {
items: [] // initial is empty
}
},

componentDidMount: function() { // the component has be rendered for the 1st time
chrome.storage.local.get(null, function(result) { // receive the items
var keys = Object.keys(result);
// get all the keys from chrome storage and add to array items
for (var i = 0; i < keys.length; i++) {
items.push(keys[i]);
}

this.setState({ items: items }); // set the state
}.bind(this)) // bind the callback to the component's this, so you can use this.setState
},

render: function() {
// display an element with name of key
return (
<div>
{this.props.items.map(function loop(item, i) {
return (<div>{item}</div>)
})}
</div>
)
}

})

关于javascript - 如何使用 React 映射 Prop 创建新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862684/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com