【发布时间】:2020-04-04 01:50:21
【问题描述】:
我是 React 新手,正在尝试了解 Context api。现在我有一个显示项目列表的组件。我还有一个组件可以显示有关该项目的详细信息。我想要做的是当我单击某个项目时,显示组件会显示该项目的信息。这是我当前的代码。我目前收到一个错误,即我的 Product.js 文件中未定义状态。
PRODUCTS.JS
import React, { Component } from 'react';
import './App.css';
import { MyProvider, MyContext } from "./Context";
import { Link } from 'react-router-dom';
class Products extends Component {
render() {
const { id } = this.state.products
return (
<div className="products-list">
<div className="showcase">
<MyContext.Consumer>
{(context) => (
<React.Fragment>
{context.state.products.map(item => {
return (
<Link to="/ProductOverview" style={{ textDecoration: 'none', color: 'inherit' }}>
<div onClick={() => context.productDetail(id)} className="showcase-card" style={{ backgroundImage: `url(${item.bgUrl})`}}>
<article key={item.id}>
<h6>{item.info}</h6>
</article>
</div>
</Link>
);
})}
</React.Fragment>
)}
</MyContext.Consumer>
</div>
</div>
)
}
}
export default Products;
CONTEXT.JS
import React, {Component } from 'react';
export const MyContext = React.createContext();
export class MyProvider extends Component {
state = {
products: [
{
info: "Toy Car",
id: '0001'
},
{
info: "Toy Truck",
id: '0002'
},
{
info: "Toy Plane",
id: '0003'
},
{
info: "Toy Boat",
id: '0004'
}
]
};
getItem = id => {
const products = this.state.products.find(item => item.id === id);
return products;
};
productDetail = id => {
const products = this.getItem();
this.setState(() => {
return { products };
});
};
render() {
return (
<MyContext.Provider value={{
state: this.state,
productDetail: this.productDetail}}>
{this.props.children}
</MyContext.Provider>
)
}
}
PRODUCTOVERVIEW.JS
import React, { Component } from 'react';
import './App.css';
import { MyProvider, MyContext } from "./Context";
class ProductOverview extends Component {
render() {
return (
<MyContext.Consumer>
{(context) => {
const {id, info} = context;
return (
<h1>{info}</h1>
)
}}
</MyContext.Consumer>
)
}
};
export default ProductOverview;
【问题讨论】:
标签: reactjs react-context