sty*_*ler 46 javascript reactjs
新的React并试图循环Object属性但React抱怨对象无效React儿童,有人可以给我一些关于如何解决这个问题的建议吗?我添加了createFragment,但不完全确定这需要去哪里或我应采取什么方法?
JS
var tifs = {1: 'Joe', 2: 'Jane'};
var tifOptions = Object.keys(tifs).forEach(function(key) {
return <option value={key}>{tifs[key]}</option>
});
Run Code Online (Sandbox Code Playgroud)
渲染功能
render() {
const model = this.props.model;
let tifOptions = {};
if(model.get('tifs')) {
tifOptions = Object.keys(this.props.model.get('tifs')).forEach(function(key) {
return <option value={key}>{this.props.model.get('tifs')[key]}</option>
});
}
return (
<div class={cellClasses}>
<div class="grid__col-5 text--center grid__col--bleed">
<h5 class="flush text--uppercase">TIF</h5>
<select id="tif" name="tif" onChange={this.handleChange}>
{tifOptions}
</select>
</div>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
控制台出错
If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object)
Run Code Online (Sandbox Code Playgroud)
tob*_*sen 103
问题在于你使用的方式forEach()
,因为它总会返回undefined
.您可能正在寻找map()
返回新数组的方法:
var tifOptions = Object.keys(tifs).map(function(key) {
return <option value={key}>{tifs[key]}</option>
});
Run Code Online (Sandbox Code Playgroud)
如果你还想使用forEach()
,你必须做这样的事情:
var tifOptions = [];
Object.keys(tifs).forEach(function(key) {
tifOptions.push(<option value={key}>{tifs[key]}</option>);
});
Run Code Online (Sandbox Code Playgroud)
更新:
如果您正在编写ES6,您可以使用箭头功能完成相同的操作:
const tifOptions = Object.keys(tifs).map(key =>
<option value={key}>{tifs[key]}</option>
)
Run Code Online (Sandbox Code Playgroud)
这是一个显示上述所有选项的小提琴:https://jsfiddle.net/fs7sagep/
Ban*_*nzy 26
您可以以更紧凑的方式使用它:
const tifs = {1: 'Joe', 2: 'Jane'};
...
return (
<select id="tif" name="tif" onChange={this.handleChange}>
{ Object.entries(tifs).map((t,k) => <option key={k} value={t[0]}>{t[1]}</option>) }
</select>
)
Run Code Online (Sandbox Code Playgroud)
还有另一种略有不同的味道:
Object.entries(tifs).map(([key,value],i) => <option key={i} value={key}>{value}</option>)
Run Code Online (Sandbox Code Playgroud)
Fel*_*too 16
当我使用Object.entries
with时map
,我使用如下所示的数组解构并直接调用它们。
Object.entries(tifs).map(([key, value]) => (
<div key={key}>{value}</div>
));
Run Code Online (Sandbox Code Playgroud)
const tifOptions = [];
for (const [key, value] of Object.entries(tifs)) {
tifOptions.push(<option value={key} key={key}>{value}</option>);
}
return (
<select id="tif" name="tif" onChange={this.handleChange}>
{ tifOptions }
</select>
)
Run Code Online (Sandbox Code Playgroud)
小智 5
你也可以有一个像下面这样的返回 div 并使用 Javascript 的内置模板文字:
const tifs = {1: 'Joe', 2: 'Jane'};
return(
<div>
{Object.keys(tifOptions).map((key)=>(
<p>{paragraphs[`${key}`]}</p>
))}
</div>
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
96433 次 |
最近记录: |