Javascript 无法获取React中数组的长度
我正在我的React/Redux应用程序中获取订单列表。用户在“搜索”组件中键入一个单词,订单列表应显示在“列表”组件的下面。从“List”组件I console.log(orders)内部,它返回一个空数组(我默认状态为空数组),当我提交搜索词时,它返回一个包含5个项目的数组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”,但一旦我提交搜索,它就会返回未定义。为什么?它不是
[]
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)
}