網路上dev tool有兩種版本
gaearon/redux-devtools
redux作者所寫,設定比較麻煩,我是沒有用過,現在好像也比較少人使用,時代的眼淚。
redux-devtools-extension
用chrome extension開發的就是這個套件,但其實這個套件很強大,可以用於native與server side redux。下面以這個作為介紹。
最基本寫法
const store = createStore(
reducer,
compse(
applyMiddleware(),
window.__REDUX_DEVTOOLS_EXTENSION__ &&
window.__REDUX_DEVTOOLS_EXTENSION__()
)
);
於是有人這樣寫production
let middleware = applyMiddleware();
if (process.env.NODE_ENV !== 'production') {
middleware = compose(
middleware,
window.devToolsExtension &&
window.devToolsExtension()
);
}
方便的寫法
使用redux-devtools-extension
import { composeWithDevTools } from 'redux-devtools-extension';
const store = createStore(reducer,
composeWithDevTools(
applyMiddleware(...middleware),
)
);
看起來沒有差很多,但是redux-devtools-extension還提供不同的情境使用,像是logOnly
dev extension提供了許多features,這些features預設是打開的, 我很少用,如果不用建議關掉會提升效能,logOnly mode就是幫你把這些功能關閉而已,然後他又貼心的提供logOnlyInProduction mode。(判斷process.env.NODE_ENV ==='production')
import { composeWithDevTools } from 'redux-devtools-extension/logOnlyInProduction';
const composeEnhancers = composeWithDevTools({
// options like actionSanitizer, stateSanitizer
});
const store = createStore(reducer, /* preloadedState, */ composeEnhancers(
applyMiddleware(...middleware),
// other store enhancers if any
));
當然也可以開developmentOnly mode,關於production mode是否要加入dev extension可以看這篇,寫的很棒, 最後我是用了logOnlyInProduction,不過文中的website我去看似乎都抜掉了XD。
其中我還用了一個設定叫做stateSanitizer
可以將state中機敏性資訊隱閉,防範別人偷偷幹走,雖然在這個範例中一點用都沒,因為在state看不到,去dev tool的network觀察api連線就好了XDD,不過聊勝於無囉。
原本有想要把整份文件翻成中文的,但是實在太多也太忙了,有一些沒有實際使用也怕翻錯,有空再研究吧。