Erreur React Native AsyncStorage : TypeError - undefined n'est pas une fonction (près de "...state.reduce...")
P粉734486718
P粉734486718 2023-08-29 16:54:51
0
1
446

J'utilise AsyncStorage pour essayer de conserver mon état redux dans mon application React, mais j'obtiens cette erreur : TypeError : undefined n'est pas une fonction (près de '...state.reduce. ..'). J'ai regardé d'autres réponses avec des erreurs similaires mais sans succès. Je ne sais même pas lequel n'est pas défini puisqu'il dit simplement "près".我已经检查了state对象,它不是空的。 Le message suivant : 应用程序.js:

importer Main depuis "./src/components/Main" importer { NativeRouter } depuis "react-router-native" importer { createStore } depuis "redux" importer { Fournisseur } depuis "react-redux" importer un réducteur depuis "./src/reducer" importer AsyncStorage depuis "@react-native-async-storage/async-storage" import { persistStore, persistReducer } depuis "redux-persist" importer { PersistGate } depuis "redux-persist/integration/react" importer du texte depuis "./src/components/Text" const persistConfig = { clé : "racine", stockage : AsyncStorage, } const persistedReducer = persistReducer (persistConfig, réducteur) const store = createStore (persistedReducer) const persistor = persistStore (magasin) exporter la fonction par défaut App() { retour (   Chargement...} persistor={persistor}>     ) } 

这是réducteur的代码 : 减速器.js:

const réducteur = (state = [], action) => { commutateur (action.type) { cas "NEW_NOTE" : { console.log("état :>> ", état) const max = state.reduce( (précédent, actuel) => { // si (!current) retourne précédent retourner current.id > identifiant précédent ? actuel : précédent }, { identifiant : 0, corps : "" } ) const newNote = { id : max.id + 1, corps : "" } retourner state.concat (newNote) } cas "UPDATE_NOTE" : { const newNotes = state.filter((note) => action.data.id !== note.id) renvoyer [action.data, ...newNotes] } cas "DELETE_NOTE" : { return state.filter((note) => action.id !== note.id) } défaut: { état de retour } } } exporter le réducteur par défaut

编辑

有任何关于为什么会发生这种情况的想法吗?

使用普通reducer的state对象:

[{"body" : "Ddtstostksoyoyyxcuj", "id" : 2}, {"body" : "Ftistldpufipf Hhxgjbv", "id": 1}]≪/pre> 

使用持久化reducer的state对象:

{"0" : {"body": "ma première note", "id" : 1}, "1" : { "corps" : "ma deuxième note", "identifiant" : 2}, "2" : {"corps" : "ma troisième note", "identifiant" : 3}}
;

修复

减速器.js

const réducteur = (state = [], action) => { état = Objet.valeurs (état) ... 

选择器:

const notes = useSelector((state) => Object.values(state).slice(0, -1))

{"0": {"body": "嗨", "id": 7}, "1": {"body": "", "id": 8}, "2": {" body" :“”,“id”:9},“_persist”:{“重新水合”:true,“版本”:-1}}

P粉734486718
P粉734486718

répondre à tous (1)
P粉111927962

Pourquoi une TypeError se produit-elle ?

Vous avez cette erreurTypeError: undefined is not a function (near '...state.reduce...'),因为stateCe n'est pas un tableau, c'est un objet

L'objet n'a pas dereduceméthodes

Pourquoireact-persistconvertir votre tableau en objet ?

Dans lereact-persist源代码的这一行中,你可以看到let { _persist, ...rest } = state || {}code sourcecette ligne a>, vous pouvez voirlet { _persist, ...rest } = state || Déplier un tableau comme celui-ci entraîne sa conversion en objet.

Est-ce un bug ?

Probablement oui, je ne trouve aucune information dans la documentation indiquant que l'état doit être un objet.

Comment y remédier ?

Soit enveloppez votre état dans un objet au lieu d'utiliser directement un tableau

Ou reconvertissez l'objet en tableau à chaque fois que vous l'utilisez

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!