错误:无法在 reactjs 项目中读取未定义的属性(读取“地图”)\

Posted

技术标签:

【中文标题】错误:无法在 reactjs 项目中读取未定义的属性(读取“地图”)\\【英文标题】:Error: Cannot read properties of undefined (reading 'map') in reactjs project \错误:无法在 reactjs 项目中读取未定义的属性(读取“地图”)\ 【发布时间】:2021-12-31 06:31:00 【问题描述】:

主屏幕 在线错误/frontend/src/screens/HomeScreen.js:28

我想使用 redux 对我的 HomeScreen 页面的状态执行操作。数据从 api(项目数组)提供,然后呈现在屏幕上。毕竟这显示网站说上面的错误。

productReducer.js

import  
PRODUCT_LIST_REQUEST,
PRODUCT_LIST_SUCCESS,
PRODUCT_LIST_FAIL,

PRODUCT_DETAILS_REQUEST,
PRODUCT_DETAILS_SUCCESS,
PRODUCT_DETAILS_FAIL,


 from '../constants/productConstants'

export const productListReducers=(state=  products:[] ,action)=>
    switch(action.type)
    
        case PRODUCT_LIST_REQUEST:
            return  loading:true, products:[]

        case PRODUCT_LIST_SUCCESS:
            return loading:false, products:action.payload.products

        case PRODUCT_LIST_FAIL:
            return loading:false,error:action.payload

        default:
            return state
    


productAction.js

import  axios  from 'axios'
import  
    PRODUCT_LIST_REQUEST,
    PRODUCT_LIST_SUCCESS,
    PRODUCT_LIST_FAIL,

    PRODUCT_DETAILS_REQUEST,
    PRODUCT_DETAILS_SUCCESS,
    PRODUCT_DETAILS_FAIL 
 from '../constants/productConstants'

export const listProducts=()=>async(dispatch)=> 
    try
    
        dispatch(type:PRODUCT_LIST_REQUEST)
        const  data = await axios.get('http://127.0.0.1:8000/api/products/')
        dispatch(
            type:PRODUCT_LIST_SUCCESS,
            payload:data
        )
    
    catch(error)
        dispatch(
            type:PRODUCT_LIST_FAIL,
            payload:error.response && error.response.data.message ? error.response.data.message: error.message,
        )
    


HomeScreen.js

import React, useState, useEffect from 'react'
import  useDispatch, useSelector  from 'react-redux'
import  Row, Col  from 'react-bootstrap'
import Product from '../components/Product'
import Loader from '../components/Loader'
import Message from '../components/Message'
import  listProducts  from '../actions/productActions'

function HomeScreen() 
    
    const dispatch = useDispatch()
    const productList=useSelector(state=>state.productList)
    const  error, loading, products=productList
    
    useEffect(()=>
        
         dispatch(listProducts())  
    ,[dispatch])
   
    return (
        <div>
            <h1>Latest Products</h1> 
            loading ? <Loader /> 
                : error ?  <Message variant='danger'>error</Message> 
                : 
                (
                    <Row>
                        products.map(product=>(
                            <Col key=product._id sm=12 md=6 lg=4 xl=3>
                                <Product product=product/>
                            </Col>
                        ))
                    </Row>
                )
                
                      
            
        </div>
    )


export default HomeScreen

productConstant.js

export const PRODUCT_LIST_REQUEST='PRODUCT_LIST_REQUEST'
export const PRODUCT_LIST_SUCCESS='PRODUCT_LIST_SUCCESS'
export const PRODUCT_LIST_FAIL='PRODUCT_LIST_FAIL'

【问题讨论】:

对于const data = await axios.get('http://127.0.0.1:8000/api/products/')dataproducts 属性吗?在访问有效负载 action.payload.products 时,您似乎假设它在 PRODUCT_LIST_SUCCESS 的减速器中执行。您能否更新您的问题,包括 data 值? redux 开发工具怎么说? 【参考方案1】:
  products?.length && products.map(product=>(
      <Col key=product._id sm=12 md=6 lg=4 xl=3>
         <Product product=product/>
      </Col>
   ))

【讨论】:

请检查并告诉我发生了什么 如果products length: 2 ,这段代码仍然会失败。这个答案并没有真正解决问题。 是的,我知道,但我想知道出了什么问题? 你的意思是像评论要求澄清吗?

以上是关于错误:无法在 reactjs 项目中读取未定义的属性(读取“地图”)\的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“未捕获的类型错误:无法读取未定义的属性'参数'”reactjs + django

TypeError:无法读取reactjs中未定义的属性“长度”

ReactJs:获取无法读取未定义错误的属性“setState”[重复]

ReactJS TypeError:无法读取未定义的属性(读取'main')

ReactJS:TypeError:无法读取未定义的属性“纬度”

ReactJS TypeError:无法读取未定义的属性(读取“地图”)