【发布时间】:2021-06-30 13:00:25
【问题描述】:
我是 React 新手。事实上,我对任何前端编程语言都很陌生。因此,我遇到了许多非常奇怪,有时甚至是搞笑的问题。我正在努力将数组发送到另一个组件。问题是用户创建了该数组,它是在 render(){return(..)}
中动态创建的class Home extends Component {
constructor(props) {
super(props)
this.chosenItems = [];
}
state = {
items: [],
};
// code to import JSON from backend API, irrelevant, that part works fine
addItem(item){
this.chosenItems.push(item);
console.log(this.chosenItems); //logs created array, everything works like a charm
}
render() {
const {items} = this.state;
return (
//some code
<div key={item.id}>
{item.name} {item.price}<img src = {item.url} className="photo"/><button onClick={() => this.addItem(item)}>ADD</button>
</div>
<Basket dataFromParent = {this.getItems} />
</div>
和篮子类
class Basket extends React.Component {
constructor(props) {
super(props);
this.chosenItems = [];
}
state = {
items: []
};
componentDidUpdate()
{
this.chosenItems = this.props.dataFromParent;
console.log(this.props.dataFromParent);
}
render() {
return (
<div>
<h2>{this.chosenItems}</h2>
<h2>{this.props.dataFromParent}</h2>
</div>
);
}
}
export default Basket;
问题是控制台日志显示“未定义”。你能告诉我我做错了什么吗?或者我的整个方法都不正确,我应该寻找其他解决方案?
更新
class Home extends Component {
state = {
items: [],
chosenItems []
};
// code to import JSON from backend API, irrelevant, that part works fine
addItem(item){
this.setState(prev => ({
chosenItems: [...prev.chosenItems, item]
}))
}
render() {
const {items, chosenItems} = this.state;
return (
<div>
<div><Basket chosenItems ={this.state.chosenItems} /></div>
<Router>
<div className="container">
<ul>
<Link to="/login">login</Link>
<Link to="/basket">basket</Link>
</ul>
<Route path="/login" component={Login} />
<Route path="/basket" component={Basket} />
</div>
</Router>
<div>
{items.map(item =>
<div key={item.id}>
{item.name} {item.price} {item.quantity} <img src = {item.url} className="photo"/><button onClick={() => this.addItem(item)}>Add!</button>
</div>
)}
</div>
</div>
);
}
}
class Basket extends React.Component {
render() {
return (
<div>
{this.props.chosenItems.map(item =>
<div key={item.id}>
{item.name}{item.price}
</div>
)}
</div>
);
}
}
这行得通,但是 selectedItems 数组会立即打印在哪里
<Basket chosenItems ={this.state.chosenItems} />
位于按下按钮后。当我点击购物篮重定向时,我得到了
TypeError: Cannot read property 'map' of undefined
【问题讨论】:
-
如果您不熟悉 react id,强烈建议您开始使用功能组件而不是类组件。您最终将不得不使用它们。所以现在比你已经习惯了课堂上的要好。
标签: reactjs frontend react-component