四季花海
2023-09-14 17:47:07
我對原生和 Redux 的反應很陌生,特別是我收到了一條我真的很難處理的錯誤消息。這是我收到的錯誤TypeError:未定義不是對象(評估 '(0, _reactRedux.useSelector)(function (state) { return state.myPigeons.myPigeons; }).length')我將在這里向您展示迄今為止我得到的所有相關代碼,然后解釋我這一切背后的意圖。主屏.jsPigeon.js(動作)export const ADD_PIGEON = 'ADD_PIGEON';export const addPigeon = () => { return {type: ADD_PIGEON}};Pigeon.js(減速器)import {ALLPIGEONS} from '../../data/pigeons_data';import { ADD_PIGEON } from '../actions/pigeon';const initialPigeonState = () => { myPigeons = []};const pigeonReducer = (state = initialPigeonState, action) => { switch(action.type){ case ADD_PIGEON:{ var generatedPigeon = Math.floor(Math.random() * ALLPIGEONS.length); generatedPigeon.nickname = "Kuba"; var updatedPigeons = [...state.myPigeons, generatedPigeon] return{...state, myPigeons: updatedPigeons} } }; return state;};export default pigeonReducer;鴿子數據.jsimport pigeon from '../models/pigeon';const ALLPIGEONS = [ new pigeon( 1, "red", "Red-billed pigeon", " " ), new pigeon( 2, "blue", "Blue pigeon", " " ), new pigeon( 3, "white", "Release dove", " " ), new pigeon( 4, "brown", "Brown cuckoo-dove", " " ), new pigeon( 5, "green", "Green pigeon", " " ),];export default ALLPIGEONS;應用程序.js//Automatic importsimport { StatusBar } from 'expo-status-bar';import React, {useState} from 'react';import { StyleSheet, Text, View } from 'react-native';import { Provider } from 'react-redux';//My importsimport * as Font from 'expo-font';import {AppLoading} from 'expo';import ReduxThunk from 'redux-thunk';import { createStore, combineReducers, applyMiddleware } from 'redux';這里的問題基本上是我想在 redux 中有一個狀態,其中存儲我所有的鴿子(我的狀態現在應該是空的,因為我沒有向我的狀態添加任何鴿子)并且在我單擊主屏幕中的按鈕后。在 Node.js 中我向狀態添加了一只鴿子,以便文本可以顯示我有多少只鴿子。現在,當我進入主屏幕時,應用程序總是崩潰。我很感謝任何幫助!
4 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
main.js 中的 state.myPigeons 在啟動應用程序時未定義。如果您嘗試對 redux 對象執行某些操作,則應在其中定義該值。最好的方法是始終在代碼中進行防御性檢查,以檢查對象是否“未定義”。

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
這段代碼看起來不對
var generatedPigeon = Math.floor(Math.random() * ALLPIGEONS.length);
generatedPigeon.nickname = "Kuba";
嘗試更多類似
var generatedPigeonNo = Math.floor(Math.random() * ALLPIGEONS.length);
var generatedPigeon= ALLPIGEONS[generatedPigeonNo];
generatedPigeon.nickname = "Kuba";

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
如果有人仍然試圖找出給定代碼中的問題,我想我明白了;
const initialPigeonState = () => { myPigeons = [] };
這就是整個問題。這里initialPigeonState
定義為一個不返回任何東西的函數。從而導致錯誤。
現在為了消除錯誤,我們可以定義initialPigeonState
為;
initialPigeonState = { myPigeons: [] }
或者,如果您想將其保留為函數,則從中返回一個對象;
const initialPigeonState = () => ({ myPigeons: [] });
箭頭符號后面的括號表示return
返回其內部內容(此處為對象)。
添加回答
舉報
0/150
提交
取消