React Native - (0, _redux.combineReducers) не является функцией - PullRequest
0 голосов
/ 22 ноября 2018

В настоящее время я изучаю некоторый излишек в React Native.Но я продолжаю спотыкаться об одной ошибке, если пытаюсь объединить свои редукторы в файле index.js.

(0, _redux.combineReducers) is not a function

Я просмотрел несколько уроков, как это использовать, и я следую каждому шагу, но он продолжает появлятьсямой экран.

Мой файл App.js выглядит следующим образом:

import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View } from 'react-native';
import ReduxThunk from 'redux-thunk';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reducers from './reducers/reducers';
import { Header } from './components/common/Header';

let store   = createStore(reducers, applyMiddleware(ReduxThunk));

export default class App extends Component {
    render() {
        return (
            <Provider store={ store }>
                <View style={ styles.container }>
                    <Header title="Tech Stack"/>
                </View>
            </Provider>
        );
    }
}

Мой файл redurs.js в папке src / redurs:

console.log('HELLO');
import { combineReducers } from 'redux';
console.log( combineReducers );
import LibraryReducer from './LibraryReducer';

const reducers = combineReducers({
    libraries: LibraryReducer
});

export default reducers;

// Fixed the log. When i'm loggin combineReducers i get undefined.

LibraryReducer.js

import data from '../data/LibraryList.json';

export default () => data;

Console errors: 
[Error log][1]

data json:

[
    {
        "id": 0,
        "title": "React",
        "description": "JS framework"
    },
    {
        "id": 1,
        "title": "Vue",
        "description": "JS framework"
    },
    {
        "id": 2,
        "title": "Angular",
        "description": "JS framework"
    }
]

package.json

{
  "name": "redux",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },
  "dependencies": {
    "react": "16.6.1",
    "react-native": "0.57.5",
    "react-redux": "^5.1.1",
    "redux": "^4.0.1",
    "redux-thunk": "^2.3.0"
  },
  "devDependencies": {
    "babel-jest": "23.6.0",
    "jest": "23.6.0",
    "metro-react-native-babel-preset": "0.49.2",
    "react-test-renderer": "16.6.1"
  },
  "jest": {
    "preset": "react-native"
  }
}

СПАСИБО ВСЕМ за ваши предложения!

РЕШЕНО: Создан новыйпроект, но не дал ему имя Redux.

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Итак, во-первых, я бы установил ReduxThunk в папку вашего проекта, поэтому запустите следующее:

npm i redux-thunk --save

далее в вашем App.js импортируйте эту библиотеку примерно так

import ReduxThunk from 'redux-thunk'

затемСоздайте Redux Store

const store = createStore(reducers, applyMiddleware(ReduxThunk))

Метод создания функций редукторов должен быть в конце вашего reducers.js файла примерно так.

const reducers  = combineReducers({
    libraries,
    //otherFunctions...
});

export default reducers;

Не забудьте импортироватьМетод combReducers из redux в вашем reducers.js файле.

import { combineReducers } from 'redux';

Метод combReducers принимает функции, которые вы ранее объявили в reducers.js для последующего примера (я пишу ...)

const INITIAL_STATE = { isLoggedIn: false }
function libraries(state = INITIAL_STATE, action){
   switch (action.type) {       

     default:
      return state
   }
 }

вы должны иметь возможность написать множество случаев для оператора switch, как хотите.например ..

const INITIAL_STATE = { isLoggedIn: false }
function libraries(state = INITIAL_STATE, action){
   switch (action.type) { 

     case "isLogginSuccess":
      return {...state, isLoggedIn: action.payload}

     default:
      return state
   }
 }

регистр редуктора "isLogginSuccess" должен запускаться при вызове другой функции в соответствии с желаемым компонентом.

0 голосов
/ 22 ноября 2018

Похоже, у вас та же проблема, что и у здесь .

TLDR: переименуйте папку, которую вы назвали redux, во что-то другое, сотрите ваш node_modules, переустановите идолжно сработать.

0 голосов
/ 22 ноября 2018

Мы рассмотрели много разных вещей, но проблема была в разрешении модуля.import { combineReducers } from 'redux' не работал, по-видимому, потому что сам проект получил имя 'redux' в своем файле package.json и / или потому что папка в корне проекта называлась 'redux'.

...