2017-01-10 13 views
0

im пытается загрузить некоторые данные json в моем простом веб-приложении. Я собираюсь показать вам шаги. Первое мое действие:не могу загрузить данные json из действия в реакции-редукции

const jsonData = 
    [ 
    { 
     "id": "00260001010000000001", 
     "accountNumber": "0026.0001.01.0000000001", 
     "description": "My account #1", 
     "balance": 42.0, 
     "balanceAvailable": 42.0, 
     "currency": "EUR" 
    }, 
    { 
     "id": "00260001010000000002", 
     "accountNumber": "0026.0001.01.0000000002", 
     "description": "My account #2", 
     "balance": 43.0, 
     "balanceAvailable": 43.0, 
     "currency": "EUR" 
    } 
    ]; 

export function inAccountList(jsonData) { 
    return { 
    type: 'ACCOUNT_LIST', 
    payload: jsonData 
    }; 
} 

Затем я создаю мой редуктор счет-лист-редуктор, как это:

import { Map } from 'immutable'; 

function mergeState(state, newState) { 
    return state.merge(newState); 
} 

    export default function (state = Map(), action) { 
     switch (action.type) { 
     case 'ACCOUNT_LIST': 
      return mergeState(state, action.payload); 
     default: 
      return state; 
     } 
    } 

и

import { combineReducers } from 'redux-immutable'; 
import AccountListReducer from './account_list_reducer'; 

const rootReducer = combineReducers({ 
    accounts: AccountListReducer, 
}); 

export default rootReducer; 

Затем я создаю мой accountListContainer, как это:

import { connect } from 'react-redux'; 
import AccountList from '../../components/AccountList'; 


function mapStateToProps(state) { 
    // FIXME account number and available balance mapping. 
    return { accounts: state.get('accounts').map(account => account.toJS()) }; 
} 

const AccountListContainer = connect(mapStateToProps)(AccountList); 

export default AccountListContainer; 

и мой Acc ountList вид:

import React, { PropTypes } from 'react'; 
import { Table } from 'reactstrap'; 
import AccountEntry from '../AccountEntry'; 

const AccountList = ({ accounts }) => (
    <div className="account-list"> 
    <h4 className="table-header">Accounts</h4> 
    <Table hover> 
     <thead> 
     <tr> 
      <th>#</th> 
      <th>Account Number</th> 
      <th>Description</th> 
      <th>Balance</th> 
      <th>Available Balance</th> 
      <th>Currency</th> 
     </tr> 
     </thead> 
     <tbody> 
     {accounts.map((account, i) => 
      <AccountEntry 
      key={account.id} idx={i + 1} 
      {...account} 
      /> 
    )} 
     </tbody> 
    </Table> 
    </div> 
); 


export default AccountList; 

Но это не работает. он не отображает фиктивные данные, записанные в jsonData. Вы хоть понимаете, что происходит?

Большое спасибо

+0

Состояние вашего магазина не является объектом ImmutableJS, скорее ваши редукторы являются объектами ImmutableJS i nside it. Попробуйте state.accounts.toJS() в вашей функции mapStateToProps –

+0

Спасибо за ваш быстрый ответ. Мистер Митчелл, но это не работает. он показывает мне ошибку, пойманную TypeError: Невозможно прочитать свойство «toJS» undefined – user7334203

+0

Попробуйте вставить некоторые точки останова в mapStateToProps и посмотреть, что находится в вашем магазине. У вас должна быть пустая карта в состоянии inital, а затем какой-то объект Immutable после отправки ACCOUNT_LIST. Ошибка, которую вы получаете, предполагает, что state.accounts не существует, когда он вызывается –

ответ

0

Я думаю, что призыв к действию создателю inAccountList отсутствует

  1. пройти создатель действия inAccountList в mapDispatchToProps
  2. вызова действия в componentDidMount из AccountList компонента