2016-03-08 3 views
0

Это хорошая идея включить свойства, не входящие в магазин в mapStateToProps?mapStateToProps и свойства, не поступающие из магазинов

например.

const fooBar =() => 'foobar!' 

const mapStateToProps = (state) => { 
    return { 
    todos: getVisibleTodos(state.todos, state.visibilityFilter), 
    fooBar 
    } 
} 
+0

Вы можете сделать это. Вы хотите получать уведомления о том, когда изменяется «fooBar», поскольку он не изменяется через Redux – Andreyco

ответ

2

Да, это приемлемый прецедент - однако мы могли бы реализовать эту функцию немного чище. Например, mapStateToProps в react-redux принимает второй аргумент, названный ownProps, которые являются реквизитом, передаваемый в компоненту контейнера в вопросе:

Via https://github.com/reactjs/react-redux/blob/master/docs/api.md

[mapStateToProps(state, [ownProps]): stateProps](Function): ... Если ownProps указывается как второй аргумент, его значение будет представлять реквизиты , переданные вашему компоненту, а mapStateToProps будет повторно вызываться всякий раз, когда компонент получает новые реквизиты.

Так что, возможно, а не инстанцирование fooBar внутри ваш контейнер компонента, то почему бы не передать его в качестве опоры для самого компонента, а затем получить доступ к нему через ownProps?

Some Other Component

<MyContainer fooBar={() => alert('foobar!')} 

MyContainer

const mapStateToProps = (state, ownProps) => { 
    return { 
    todos: getVisibleTodos(state.todos, state.visibilityFilter), 
    fooBar: ownProps.fooBar 
    } 
}