ner*_*daj 6 session-storage reactjs fetch-api react-redux
我正在开发我的第一个react / redux应用程序,我不确定应该在哪里调用sessionStorage.setItem()。我目前正在从loginUserSuccess()操作存储用户凭证,但是我不确定这是应该执行的操作。此外,我正在使用访存来发出请求,并希望将用户的authToken添加到所有请求中。我一直在研究fetch-intercept,但没有提供太多文档来修改标头。
actions / loginActions.js
export function loginUser(user) {
return function(dispatch) {
return LoginApi.login(user).then(creds => {
dispatch(loginUserSuccess(creds));
}).catch(error => {
throw(error);
});
};
}
export function loginUserSuccess(creds) {
sessionStorage.setItem('credentials', JSON.stringify(creds));
return {
type: types.LOGIN_USER_SUCCESS,
state: creds
}
}
Run Code Online (Sandbox Code Playgroud)
api / packageApi.js
class PackageApi {
// called on successful login
static getAllPackages() {
const request = new Request('/my/endpoint', {
method: 'GET',
headers: new Headers({
'AUTHORIZATION': `Bearer ${JSON.parse(sessionStorage.credentials).authToken}`
})
});
return fetch(request).then(response => {
return response.json();
}).catch(error => {
return error;
});
}
}
export default PackageApi;
Run Code Online (Sandbox Code Playgroud)
考虑到 Dan Abramov 的解释,我们有以下几点:
商店/会话Storage.js
export const loadState = () => {
try {
const serializedState = sessionStorage.getItem('state');
if (serializedState === null) {
return undefined;
}
return JSON.parse(serializedState);
} catch (error) {
return undefined;
}
};
export const saveState = (state) => {
try {
const serializedState = JSON.stringify(state);
sessionStorage.setItem('state', serializedState);
} catch (error) {
// Ignore write errors.
}
};
Run Code Online (Sandbox Code Playgroud)
商店/index.js
import { createStore } from 'redux';
import rootReducer from '../reducers';
import { loadState, saveState } from './sessionStorage';
const persistedState = loadState();
const store = createStore(rootReducer, persistedState);
store.subscribe(() => {
saveState(store.getState());
});
Run Code Online (Sandbox Code Playgroud)
完整说明:https : //egghead.io/lessons/javascript-redux-persisting-the-state-to-the-local-storage
| 归档时间: |
|
| 查看次数: |
2819 次 |
| 最近记录: |