2016-02-20 3 views
3

Я изучаю редукцию и реагирую. Я следую некоторым учебникам, чтобы сделать приложение.Как получить диспетчерскую скидку

Я это action:

export function getDueDates(){ 
    return { 
    type: 'getDueDate', 
    todo 
    } 
} 

это магазин:

import { createStore } from 'redux'; 
import duedates from './reducers/duedates' 

export default createStore(duedates) 

Это редуктор:

импорт Неизменное из 'неизменное'

export default (state = Immutable.List(['Code More!']), action) => { 
    switch(action.type) { 
    case 'getDueDate': 
     return state.unshift(action.todo) 
    default: 
     return state 
    } 
} 

и в entry point js у меня есть это:

import React from 'react'; 
import ReactDOM from 'react-dom'; 

import store from './app/store' 
import { Provider } from 'react-redux' 

import App from './app/Components/AppComponent'; 


ReactDOM.render(
    <Provider store={store}> 
     <App /> 
    </Provider>, 
    document.getElementById('app') 
); 

Теперь (согласно некоторым примерам), я должен позвонить getDueDate из dispatch, но я не понимаю, как получить dispatch на компоненте, чтобы вызвать действие

ответ

4

Использование connect из react-redux пакета. Он имеет две функции в качестве параметров, mapStateToProps и mapDispatchToProps, которые вас интересуют. Согласно ответа от Ник Болл, который частично прав, вы будете экспортировать, как это:

export default connect(mapStateToProps, mapDispatchToProps)(App)

и ваш mapDispatchToProps будет выглядеть примерно так:

function mapDispatchToProps (dispatch, ownProps) { 
    return { 
    getDueDate: dispatch(getDueDate(ownProps.id)) 
    } 
} 

, пока подключен ваш компонент в хранилище есть идентификатор свойства, переданный сверху, вы сможете вызвать this.props.getDueDate() изнутри.

EDIT: Там, вероятно, нет необходимости в использовании в этом случае id, однако моя точка была указать на то, что реквизит пойти в качестве второго параметра :)

+0

Кажется, это работает !, есть ли простой рабочий план для создания асинхронного вызова сервера на редукторе? Кажется, что он обновляет prop напрямую при вызове действия, и когда асинхронный вызов заканчивается, он не меняет прокрутку – Pablo

+1

Не редуктор, используйте 'thunk-middleware', который позволяет вам отправлять функции. Эта функция имеет два параметра: 'dispatch' и' getState'. Это позволяет вам делать что угодно и отправлять все, что вы хотите в этой функции. –

+1

Вот что я говорю: http://danmaz74.me/2015/08/19/from-flux-to-redux-async-actions-the-easy-way/ –

2

Отсутствует деталь здесь connect функция от react-redux. Эта функция «подключит» ваш компонент к хранилищу, предоставив ему метод dispatch. Есть вариации, как именно это сделать, так что я предлагаю читать документацию, но простой способ будет что-то вроде этого:

// app/Components/AppComponent.js 

import { connect } from 'react-redux'; 

export class App extends React.Component { 

    /* ...you regular class stuff */ 

    render() { 

     // todos are available as props here from the `mapStateToProps` 
     const { todos, dispatch } = this.props; 

     return <div> /* ... */ </div>; 
    } 
} 

function mapStateToProps(state) { 
    return { 
     todos: state.todos 
    }; 
} 

// The default export is now the "connected" component 
// You'll be provided the dispatch method as a prop 
export default connect(mapStateToProps)(App); 
+0

Нет, вы не должны делать это так! Вы должны использовать второй параметр connect, mapDispatchToProps, для создания функций, которые затем передаются в качестве реквизита. –

+0

Я понимаю, что есть разные способы вставить действия, и я согласен с вами, но вопрос не касался лучших практик подключения компонента, касающегося того, как подключить компонент в первую очередь. Не использование метода mapDispatchToProps - это просто способ свести число новых понятий к минимуму. –

+0

Ну, он на самом деле просит получить доступ к 'отправке' изнутри своего компонента, как я предложил, это правильный способ сделать это ... Как вы можете предположить, что он должен теперь передать' отправку 'себя вплоть до дочерних компонентов, что по сути является неправильным. –

Смежные вопросы