reactjs - 数组状态变量不呈现
问题描述
我有一个需要动态渲染的表,所以我输入了 state,问题是我不能通过 state 返回它,只能用forEach
函数直接查询:
此代码有效:
render() {
let rows=[], rows2=[];
var PRODUCTS = [
{id:0,category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Football'},
{id:1,category: 'Sporting Goods', price: '$9.99', stocked: true, name: 'Baseball'},
{id:2,category: 'Sporting Goods', price: '$29.99', stocked: false, name: 'Basketball'},
{id:3,category: 'Electronics', price: '$99.99', stocked: true, name: 'iPod Touch'},
{id:4,category: 'Electronics', price: '$399.99', stocked: false, name: 'iPhone 5'},
{id:5,category: 'Electronics', price: '$199.99', stocked: true, name: 'Nexus 7'}
];
PRODUCTS.forEach((product)=>{
if( product.name.indexOf(this.props.searchText)==-1 && this.props.searchText!='')
{return;}
if(this.props.inStockOnly){
if(product.stocked){
if(product.category=="Sporting Goods"){
rows.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
else {
rows2.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
}
}
else {
if(product.category=="Sporting Goods"){
rows.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
else {
rows2.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
}
})
这不会:
render() {
let rows=[], rows2=[];
this.state.products.forEach((product)=>{
if( product.name.indexOf(this.props.searchText)==-1 && this.props.searchText!='')
{return;}
if(this.props.inStockOnly){
if(product.stocked){
if(product.category=="Sporting Goods"){
rows.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
else {
rows2.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
}
}
else {
if(product.category=="Sporting Goods"){
rows.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
else {
rows2.push(<ProductRow product={product} key={product.id} onDestroy={this.Destroy}/>)
}
}
})
它触发此错误:
product.name.indexOf is not a function
更新
这就是我设置状态的方式:
var PRODUCTS = [
{id:0,category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Football'},
{id:1,category: 'Sporting Goods', price: '$9.99', stocked: true, name: 'Baseball'},
{id:2,category: 'Sporting Goods', price: '$29.99', stocked: false, name: 'Basketball'},
{id:3,category: 'Electronics', price: '$99.99', stocked: true, name: 'iPod Touch'},
{id:4,category: 'Electronics', price: '$399.99', stocked: false, name: 'iPhone 5'},
{id:5,category: 'Electronics', price: '$199.99', stocked: true, name: 'Nexus 7'}
];
class ProductTable extends React.Component {
constructor(props)
{
super(props)
this.state={
products:PRODUCTS
};
}......
你能帮助我吗 ?
解决方案
正如@AdrianoReptti 在评论中所说,问题出在名称上。
实际上,在另一个组件中,我更改了产品的名称,以便在组件是否有库存时点亮:
product.name=product.stocked?product.name:<span style={{color:"red"}}>{product.name}</span>;
我修复了代码,现在它运行了:)
但它仍然很奇怪,我认为组件的状态是私有的,只能通过setState
子组件的返回而不是通过子组件的返回来更改。
推荐阅读
- asp.net-mvc - 我可以强制 Razor TextBoxFor 助手使用特定的小数分隔符而不是默认分隔符吗?
- javascript - React js react-dropzone 删除文件
- python - 根据条件选择 GroupBy 之后的一行
- java - 统一正则表达式java
- node.js - 函数执行耗时 60012 毫秒,完成状态为:'timeout'
- angular - 下拉菜单未显示正确的自定义值
- android - 如何在textView android中获取所有活动的跨度链接
- php - 自动化 PHP Switch 语句
- sql - SQL 查询更新先前传输的重复记录
- codenameone - Codenmae 一个如何在图标顶部添加预算并将它们放在工具栏中