Dav*_*yan 1 javascript reactjs
对于React来说,我是一个新秀,这很可能是一个简单的问题,但它几乎让我疯狂.
代码如下:
import React, { Component } from 'react';
class Tile extends Component {
constructor(props) {
super(props);
this.state = {
priceLog: [],
diff: 'equal'
};
}
componentWillReceiveProps() {
let log = this.state.priceLog;
log = log.push(this.props.price);
this.setState({ priceLog: log });
console.log(this.state.priceLog);
}
render() {
return (
<div className="Tile">
Company: {this.props.name}<br/>
Price: {this.props.price}
<div className={this.state.diff}></div>
<button id={this.props.id}>Details</button>
</div>
);
}
}
export default Tile;
Run Code Online (Sandbox Code Playgroud)
我"Unhandled Rejection (TypeError): log.push is not a function"在渲染组件时得到了.传递给组件的所有属性都是字符串.
Mur*_*göz 11
除了@CD的答案,你不想直接操纵state指定setState方法之外的东西.在这种情况下,您可以使用concat返回一个新数组并将其分配给状态变量.像这样的东西
this.setState({ priceLog: this.state.pricelog.concat(this.props.price)});
Run Code Online (Sandbox Code Playgroud)
而你的第二次调用console.log可能无法提供所需的结果,因为setState是异步调用.如果要访问新的状态变量,则必须使用这样的回调
this.setState({
priceLog: this.state.pricelog.concat(this.props.price)
}, () => console.log(this.state.pricelog));
Run Code Online (Sandbox Code Playgroud)
push 返回数组的新长度,所以替换:
log = log.push(this.props.price);
Run Code Online (Sandbox Code Playgroud)
有:
log.push(this.props.price);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8723 次 |
| 最近记录: |