我已经使用带有 rails 后端的 JWT 成功登录了我的用户。并且使用 Redux 和 Redux-thunk 将user
对象存储在我的 react-native 应用程序的全局存储中。
但是,我现在需要访问其他操作中的state.user.authentication_token
,我需要执行后端fetch
请求以获取具有适当标头的数据,并具有授权令牌。
这是我的资产列表.js组件:
import React, { Component } from 'react';
import { View, Text } from 'react-native';
import { connect } from 'react-redux';
import { fetchAssets } from '../actions';
class AssetsList extends Component {
componentWillMount() {
this.props.fetchAssets();
}
render() {
return (
<View>
<Text>Asset name...</Text>
<Text>Asset name...</Text>
<Text>Asset name...</Text>
<Text>Asset name...</Text>
<Text>Asset name...</Text>
<Text>Asset name...</Text>
</View>
);
}
}
export default connect(null, { fetchAssets })(AssetsList);
这是我调度操作的操作文件:
/*global fetch:false*/
import { API_ENDPOINT } from './api';
export const fetchAssets = () => {
return (dispatch) => {
fetch(`${API_ENDPOINT}/assets`, {
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'X-User-Token': 'ztUUQuxsnFKhYf8JMLKY', // I need access the user state here
'X-User-Email': 'somecoolemail@gmail.com' // AND HERE...
}
}).then(response => {
dispatch({
type: 'FETCH_SUCCESSFUL'
});
response.json().then(data => {
console.log(data);
}).catch(data => {
console.log(data);
});
}).catch(error => {
console.log(error);
});
};
};
我需要从状态访问用户对象,并将X-User-Token
和X-User-Email
的fetch
请求中的标头替换为存储在带有用户对象的状态中的标头。但是,我无法访问操作文件中的状态。
我在这里错过了什么?如何全局访问其他文件中的状态?
我已经有一段时间没有使用 redux 了,但这听起来像是一个完美的thunk
情况。
编辑 1- 重读您的问题,看来您已经是了。因此,只需传入第二个参数,这将是函数getState
。
export const fetchAssets = () => {
return (dispatch, getState) => {
const { user } = getState();
// user.token == token
// .. rest
};
}
https://github.com/gaearon/redux-thunk http://redux.js.org/docs/advanced/AsyncActions.html
编辑 2
不是特定于您的问题,我将在这里做出一个巨大的假设,但是您的令牌实际上是状态的一部分-我的意思是应该吗?除非应用程序更改它,否则它不需要成为您商店的一部分。不要陷入认为一切都必须在 redux 存储中的常见陷阱。