我有一个React组件,它通过API获取数据,通过使用传入的ID作为组件的prop来检索产品Object。
我有一个React / Redux应用程序,我对Redux流程还不熟悉。 我有通过我的Action / Reducer将Products(带有一个Product对象的数组)数据加载到商店。
我正在尝试使用mapStateToProps模式将其从州传递给道具。
呈现{ this.props.product.title }
Uncaught TypeError: Cannot read property '__reactInternalInstance$z9gkwvwuolc' of null
我认为这是因为它是异步的数据。 解决这个问题的最佳方法是什么?
以下是我的代码 -
class ProductListItem extends Component {
componentDidMount() {
this.props.dispatch(fetchProduct(this.props.id));
}
render() {
return (
<div>
<h1>{ this.props.product.title }</h1>
</div>
);
}
}
// Actions required to provide data for this component to render in sever side.
ProductListItem.need = [() => { return fetchProduct(this.props.id); }];
// Retrieve data from store as props
function mapStateToProps(state, props) {
return {
product: state.products.data[0],
};
}
ProductListItem.propTypes = {
id: PropTypes.string.isRequired,
dispatch: PropTypes.func.isRequired,
overlay: PropTypes.string,
};
export default connect(mapStateToProps)(ProductListItem);
答案 0 :(得分:1)
您需要检查产品是否存在,只有存在时才会访问内部数据。这是一种常见的模式:
class ProductListItem extends Component {
componentDidMount() {
this.props.dispatch(fetchProduct(this.props.id));
}
render() {
const { product } = this.props;
return (
<div>
{ product &&
<h1>{product.title}</h1>
}
</div>
);
}
}
如果产品存在,则组件将呈现<h1>
。
答案 1 :(得分:0)
在你的redux reducer中你可以定义默认状态,设置默认状态然后你可以做一些三元检查
export default function reducer(state={ title : undefined}, action) {
//ternary checking in render() on component
product.title !== undefined ? product.title : undefined
这意味着,如果product.title未定义,则渲染product.title else undefined。