2017-03-01 8 views
0

我有两个减速器我想在一个容器来使用这两者,但它只是拉从一个Redux的多个连接到一个容器

这是在减速机结合

import { combineReducers } from "redux" 

    import cityName from "./weather-apiReducers" 
    import nameOfCity from "./weather-apiReducers" 
    import weatherDescription from "./weather-apiReducers" 
    import windSpeed from "./weather-apiReducers" 
    import temperature from "./weather-apiReducers" 
    import maxTemperature from "./weather-apiReducers" 
    import minTemperature from "./weather-apiReducers" 
    import isClicked from "./weather-apiReducers" 
    import name from "./weather-apiReducers" 

    export default combineReducers({ 
     cityName, 
     nameOfCity, 
     weatherDescription, 
     windSpeed, 
     temperature, 
     maxTemperature, 
     minTemperature, 
     isClicked, 
     name 
    }) 

减速

export default function reducer(state={ 
    nameOfCity: "", 
    weatherDescription: "", 
    windSpeed: "", 
    temperature: "", 
    maxTemperature: "", 
    minTemperature: "", 
}, action) { 
    switch (action.type){ 
     case "FETCH_WEATHER_DATA": { 
      return {...state, 
       fetching: true 
      } 
     } 
     case "FETCH_WEATHER_REJECTED": { 
      return {...state, 
       fetching: false, 
       error: action.data 
      } 
     } 
     case "FETCH_WEATHER_DATA_FULFILLED": { 
      return {...state, 
       fetching: false, 
       fetched: true, 
       nameOfCity: action.results.city.name, 
       weatherDescription: action.results.list[0].weather[0].description, 
       windSpeed: action.results.list[2].wind.speed, 
       temperature: action.results.list[0].main.temp, 
       maxTemperature: action.results.list[0].main.temp_max, 
       minTemperature: action.results.list[0].main.temp_min 
      } 
     } 
     case "UPDATE_INFO_DATA_FULFILLED": { 
      return {...state, 
       nameOfCity: action.results.cityName, 
      } 
     } 
     case "HANDLE_CITY_NAME": { 
      return {...state, 
       cityName: action.value, 
      } 
     } 
    } 

    return state; 
} 


export function reducerAList(state={ 
id: "", 
name: "" 
}, action) { 
switch (action.type){ 
    case "FETCH_A_DATA": { 
     return {...state, 
      fetching: true 
     } 
    } 
    case "FETCH_A_REJECTED": { 
     return {...state, 
      fetching: false, 
      error: action.data 
     } 
    } 
    case "FETCH_A_DATA_FULFILLED": { 
     return {...state, 
      fetching: false, 
      fetched: true, 
      name: action.resultsP.name 

     } 
    } 
} 
return state; 
} 

import { applyMiddleware, createStore } from "redux" 

import logger from "redux-logger" 
import thunk from "redux-thunk" 
import promise from "redux-promise-middleware" 
import reducer, {reducerAList} from "./reducers" 

const middleware = applyMiddleware(thunk, promise(), logger()) 

export default createStore(reducer, reducerAList, middleware) 

容器

import React, { Component } from 'react'; 
import './App.css'; 
import {FormContainer} from './containers/FormContainer'; 
import WeatherInfo from './components/WeatherInfo'; 
import {fetchWeatherData} from "./actions/weather-apiActions"; 
import {fetchAList} from "./actions/weather-apiActions"; 
import {connect} from "react-redux" 
@connect((store) => { 

return { 
    nameOfCity:store.nameOfCity.nameOfCity, 
    weatherDescription:store.weatherDescription.weatherDescription, 
    windSpeed:store.windSpeed.windSpeed, 
    temperature:store.temperature.temperature, 
    maxTemperature:store.maxTemperature.maxTemperature, 
    minTemperature:store.minTemperature.minTemperature, 
    name:store.name 
    } 
}) 

内进行名称集装箱此控制台日志给出不确定的,但对于这些变量的其余它给了什么是连接给出。它根本不听名字变量。我的问题是如何将这种第二减速器与容器

render() { 
    const { cityName, nameOfCity, weatherDescription, windSpeed,  temperature, maxTemperature, minTemperature, name} = this.props; 
console.log(name); 

}

+0

您需要使用reducer和reducerAList制作combinedReducer – daniloprates

回答

3

你在这里做一些错误的连接。让我们潜入。

首先,name甚至没有从模块weather-apiReducers中导出。

让我们来看看什么是从中导出:

export default reducer ...,并且, export reducerAList ...

当您然后尝试做到以下几点:

import name from './weather-apiReducers,在现实中,name解析到该模块的default出口。因此,当您将其包含在combineReducers的调用中时,实际上您将传递相同的功能(default导出)两次。

你犯的第二个错误是Reduux在Redux中的工作原理的一个基本误解。

在Redux中,状态存储在单个原子对象中。您传递给combineReducers的每个reducer都会获得一个密钥,该密钥对应于该reducer返回的最后一个状态对象

根据该文档:

的combineReducers辅助功能将一个对象,其值是 不同减少功能集成在单一减小功能可以 通行证createStore。

生成的缩减器调用每个子缩减器,并将其结果收集到单个状态对象中。状态对象 的形状与传递的减速器的键匹配。

既然你在现实中,只有通过减速功能combineReducers,你只得到了背面有两个状态键。

此外,reducer只是一个函数,它返回一个对象,然后形成redux存储的一部分。您应该只有importexport这些,而不是他们生产的状态。如果你希望有更多的钥匙,你需要为你想要的每个钥匙制作一个减速功能

如果我已经猜到正确你的意图,你其实应该做的是什么分裂了reducerreducerAList进入减速功能为每个cityName, nameOfCity, weatherDescription, windSpeed, name等。然后您就可以访问一个独立的国家目标为他们每个人在您使用connect创建的容器组件中。

+0

我只是删除了状态和添加的功能,这是您提到的第一个错误。现在我试图围住第二。如果我想访问第二个键,我应该这样做? @connect((店,secondArgument)=> { 回报{ 名称:secondArgument.name }} ) – OunknownO

+0

你应该只重命名'reducer'为'weatherApiReducer'和'reducerAList'到'loadingStatusReducer'。这样你就可以在你的容器中访问'name':'store.weatherApiReducer.name'。 – natnai

+0

weatherApiReducer.js导出一个reducer,loadStatusReducer导出另一个reducer。您将两者合并到一个单独的文件中,然后导出'combineReducers'的结果。最后你将它传递给'createStore',并且你可以按照陈述访问你的值。 – natnai