Javascript 无法获取React中数组的长度

Javascript 无法获取React中数组的长度,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我正在我的React/Redux应用程序中获取订单列表。用户在“搜索”组件中键入一个单词,订单列表应显示在“列表”组件的下面。从“List”组件I console.log(orders)内部,它返回一个空数组(我默认状态为空数组),当我提交搜索词时,它返回一个包含5个项目的数组 [] orders: (5) [{…}, {…}, {…}, {…}, {…}] 但是,如果我使用console.log(orders.length)我会得到“0”,但一旦我提交搜索,它就会返回未定义。为什么?它不是

我正在我的React/Redux应用程序中获取订单列表。用户在“搜索”组件中键入一个单词,订单列表应显示在“列表”组件的下面。从“List”组件I console.log(orders)内部,它返回一个空数组(我默认状态为空数组),当我提交搜索词时,它返回一个包含5个项目的数组

[] 
orders: (5) [{…}, {…}, {…}, {…}, {…}]
但是,如果我使用console.log(orders.length)我会得到“0”,但一旦我提交搜索,它就会返回未定义。为什么?它不是数组吗

[]
0
{orders: Array(5)}
undefined
列表组件:

export class List extends React.Component {
  render() {
    const { orders } = this.props;
    console.log(orders.orders);

    return <div>List Component</div>;
  }
}

const mapStateToProps = state => ({
  orders: state.orders.ordersArr
});
还原剂指数

export default combineReducers({
  orders: ordersReducer
});
行动:

export const fetchOrders = () => async dispatch => {
  const response = await work.get(`/needtoorders`);

  dispatch({ type: 'FETCH_ORDERS', payload: response.data });
};

似乎
orders
是一个对象,它也由一个名为
orders
的属性组成。该属性由一个数组组成

请尝试以下方法:

console.log(orders.orders.length) 
考虑到
orders
orders.orders
可能未定义,您也可以尝试此方法

if (orders && orders.orders && orders.orders.length > 0) {
  console.log(orders.orders.length)
}

似乎
initialState
包含
ordersar
不包含
orders

您能试试这个吗

if (orders && orders.orders && orders.orders.length > 0) {
  console.log(orders.orders.length)
}

希望有帮助

你能分享一些代码吗?如果不是数组,那是什么?你能确认你的减速机到底返回了什么吗<代码>响应。数据可能不是数组@j_nguyen@VahidAkhtar
console.log(Array.isArray(orders.orders));//true
console.log(state)
orders:name:“a”orders:orders:(5)[{…},{…},{…},{…},{…},{…}]@hussain.codes console.log(Array.isArray(orders.orders));//好吧,我认为你的状态数据类型不一致,正在改变。例如,最初,
orders.orders
是一个数组(您已经在reducer中设置了它),但是当用户键入它正在从一个数组更改为其他数组的内容时,您需要检查到底发生了什么以及为什么会发生这种情况,我建议您检查您从操作中分派的内容。
console.log(orders.orders)返回(5)[{…},{…},{…},{…},{…},{…}]
console.log(orders.orders.length)
抛出错误类型错误:无法读取undefined@j_nguyen我已经更新了我的代码。请看一下if语句的可选/未定义检查。我没有提到我将reducer传递给combinedreducer,并将它们作为称为“orders”的道具传递。是的,他正在将ordersar分配给orders,所以这不是问题。
if (orders && orders.orders && orders.orders.length > 0) {
  console.log(orders.orders.length)
}