2017-09-26 129 views
0

我想用下面的答案 Redux state persistence with a database阵营终极版多applyMiddleware

import {createStore, compose, applyMiddleware} from 'redux'; 

const localStorageMiddleware = ({getState}) => { 
    return (next) => (action) => { 
    const result = next(action); 
    localStorage.setItem('applicationState', JSON.stringify(
     getState() 
    )); 
    return result; 
    }; 
}; 

const store = compose(
    applyMiddleware(
    localStorageMiddleware 
) 
)(createStore)(
    reducer, 
    JSON.parse(localStorage.getItem('applicationState')) 
) 

但我不明白这里的JavaScript语法 他如何使用compose(argument)(createStore)(argument)

有没有其他的选择,比如createStore(reducer,initialState,compose(argument))

另外,如何在初始状态将在这里通过

const createStoreWithMiddleware = compose( 
    applyMiddleware(thunkMiddleware) 
)(createStore); 

export default function configureStore(initialState) { 
    const store = createStoreWithMiddleware(rootReducer); 
    return store; 
} 
+1

撰写返回具有相同签名作为第一个参数的函数 - createStore,然后用第二个参数调用该函数。 - reducer和初始状态 –

+0

@ReiDien有没有关于JavaScript语法的任何教程? – amorenew

+1

我没有任何。也许只是深入了解功能可以帮助你解决并发症 –

回答

1

是的!该​​3210语法是使用createStore的老式的方式,我们试图鼓励人们使用较新的语法来代替:

const composedEnhancers = compose(
    firstEnhancer, 
    secondEnhancer 
); 

const store = createStore(
    rootReducer, 
    preloadedState, 
    composedEnhancers 
); 
+0

你知道任何源代码的函数,如func1(arg)func2(arg)吗? – amorenew

+1

这是一种称为“currying”的函数式编程方法,或者也许只是一个返回另一个函数的函数。我有一些关于函数式编程概念的文章(https://github.com/markerikson/react-redux-links/blob/master/functional-programming.md)可能有用。 – markerikson