我在 react-redux 小测试中得到“无法读取未定义的属性 'cart'”

Posted

技术标签:

【中文标题】我在 react-redux 小测试中得到“无法读取未定义的属性 \'cart\'”【英文标题】:I get “Cannot read property 'cart' of undefined” in a react-redux little test我在 react-redux 小测试中得到“无法读取未定义的属性 'cart'” 【发布时间】:2021-04-02 08:39:06 【问题描述】:

拜托,谁能帮我做这个测试

我编写了一个简单的 react-redux 示例,其中有一个产品列表,用户可以用它来填充购物车。 我创建了一个减速器,比如

const cartReducer = (prevState = storeInitialState, action)

initialState 在哪里

export const storeInitialState = 
    forSale: GROCERY_ITEMS,
    cart: []

forSale 是要出售的产品,cart 是用户在购物车中的产品

通过使用 redux 执行 chrome 开发人员工具,我可以看到该状态有正确销售的产品,但是在尝试显示它们时,我得到“无法读取未定义的属性 'cart'”

在显示购物车中产品的组件中,我输入了:

function mapStateToProps(state) 
    return 
       productsInCart: this.state.cart
    
 
 
 function mapDispatchToProps(dispatch) 
    return 
        removeFromCart: (index) => dispatch(removeFromCartActn)
    
 
 
 export default connect (mapStateToProps, mapDispatchToProps)(GroceryCart)

然后,我通过遍历 jsx 中的产品来展示产品:

this.props.productsInCart.map((productInCart, index) => 
                                return (
                                    <tr key=index>
                                        <td>productInCart.name</td>
                                        <td>productInCart.price</td>...

这是我收到错误“无法读取未定义的属性 'cart'”的地方

function mapStateToProps(state) 
    return 
       productsInCart: this.state.cart
    
 

状态好像是未定义的,为什么呢?

提前谢谢你

拉斐尔

【问题讨论】:

【参考方案1】:

mapStateToProps 中你应该只使用state.cart,而不是this.state.cart

function mapStateToProps(state) 
    return 
         productsInCart: state.cart,
    ;

mapStateToProps 中的this 指向一个窗口对象,所以this.state 可能是undefined

【讨论】:

以上是关于我在 react-redux 小测试中得到“无法读取未定义的属性 'cart'”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 react-redux 钩子测试组件?

如何重置 react-redux 的值?

在 React-Redux 应用程序中使用 JEST 进行测试时导入问题

如何在 React-Redux 应用程序中修复 431 请求标头字段太大

将graphql查询响应与react-redux连接,得到ReferenceError:找不到变量

如何对 React-Redux 连接组件进行单元测试?