Javascript redux thunk获取api操作和还原程序
因此,我决定使用Javascript redux thunk获取api操作和还原程序,javascript,react-native,redux,react-redux,redux-thunk,Javascript,React Native,Redux,React Redux,Redux Thunk,因此,我决定使用redux thunk,在我的actions和reducer中编写函数时遇到了一个问题。实际上,函数如下所示: async getData() { if (this.props.amount === isNaN) { return; } else { try { await fetch( `https://api.exchangeratesapi.io/latest?base=${this.props
redux thunk
,在我的actions和reducer中编写函数时遇到了一个问题。实际上,函数如下所示:
async getData() {
if (this.props.amount === isNaN) {
return;
} else {
try {
await fetch(
`https://api.exchangeratesapi.io/latest?base=${this.props.base}`,
)
.then(res => res.json())
.then(data => {
const date = data.date;
const result = (data.rates[this.props.convertTo] * this.props.amount).toFixed(4);
this.setState({
result,
date,
});
}, 3000);
} catch (e) {
console.log('error', e);
}
}
}
而且我已经有了动作类型
export const FETCH_DATA_BEGIN = 'FETCH_DATA_BEGIN';
export const FETCH_DATA_SUCCESS = 'FETCH_DATA_SUCCESS';
export const FETCH_DATA_FAIL = 'FETCH_DATA_FAIL';
还有像这样的行为
export const fetchDataBegin = () => {
return {
type: actionTypes.FETCH_DATA_BEGIN,
};
};
export const fetchDataSuccess = data => {
return {
type: actionTypes.FETCH_DATA_SUCCESS,
data: data,
};
};
export const fetchDataFail = error => {
return {
type: actionTypes.FETCH_DATA_FAIL,
error: error,
};
};
然后是对我来说最困难的部分,我不知道如何从函数async getData()
获得相同的结果。我已经在行动中做到了这一点:
export async function fetchData() {
return async dispatch => {
return await fetch(`https://api.exchangeratesapi.io/latest?base=${this.props.base}`)
.then(res => res.json())
.then(data => {
// <------------------- WHAT NEXT?
}
};
导出异步函数fetchData(){
返回异步调度=>{
返回等待获取(`https://api.exchangeratesapi.io/latest?base=${this.props.base}`)
.then(res=>res.json())
。然后(数据=>{
//
现在这个代码:
const date = data.date;
const result = (data.rates[this.props.convertTo] * this.props.amount).toFixed(4);
this.setState({
result,
date,
});
进入你的减速机
if(action.type === FETCH_DATA_SUCCESS) {
const date = action.data.date;
const rates = action.data.rates;
return { ...state, rates, date };
}
现在,您可以在组件中使用redux状态并在那里进行其余的计算(需要this.props
)
要立即分派fetchData
操作,请在react-redux连接的组件中执行this.props.dispatch(fetchData())
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
编辑
下面是如何在组件中使用状态
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
我假设您已经创建了redux商店。类似于:
const store = createStore(rootReducer,applyMiddleware(thunk));
现在,您可以使用react redux
库的connect
函数将redux状态连接到组件
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
您现在可以在DOM中使用此高阶组件,并向其传递适当的道具:
import ConnectedComponent from "./pathTo/ConnectedComponent";
...
return <View><ConnectedComponent convertTo={...} amount={...} /></View>;
从“/pathTo/ConnectedComponent”导入ConnectedComponent;
...
返回;
此外,在组件中
您现在可以阅读this.props.date
和this.props.result
并在需要的任何地方使用它们
您可能希望在将来了解该状态并降低redux的性能成本
现在这个代码:
const date = data.date;
const result = (data.rates[this.props.convertTo] * this.props.amount).toFixed(4);
this.setState({
result,
date,
});
进入你的减速机
if(action.type === FETCH_DATA_SUCCESS) {
const date = action.data.date;
const rates = action.data.rates;
return { ...state, rates, date };
}
现在,您可以在组件中使用redux状态并在那里进行其余的计算(需要this.props
)
要立即分派fetchData
操作,请在react-redux连接的组件中执行this.props.dispatch(fetchData())
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
编辑
下面是如何在组件中使用状态
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
我假设您已经创建了redux商店。类似于:
const store = createStore(rootReducer,applyMiddleware(thunk));
现在,您可以使用react redux
库的connect
函数将redux状态连接到组件
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
您现在可以在DOM中使用此高阶组件,并向其传递适当的道具:
import ConnectedComponent from "./pathTo/ConnectedComponent";
...
return <View><ConnectedComponent convertTo={...} amount={...} /></View>;
从“/pathTo/ConnectedComponent”导入ConnectedComponent;
...
返回;
此外,在组件中
您现在可以阅读this.props.date
和this.props.result
并在需要的任何地方使用它们
您可能希望将来能够记住状态并降低redux的性能成本。您还可以写下如何在组件中使用redux状态来进行这些计算吗?当然可以!对不起,我住的地方是夜间,不得不去。我将编辑答案并显示状态使用代码非常感谢Giorgi!我可以问一下si吗未来的类似问题?看来你已经知道了;)不客气!只要我有时间,我愿意帮助任何需要它的人。我做了你写给我的事情,几乎成功了!现在我有个问题。你有时间帮我解决这个问题吗?你也可以写下如何在组件中使用redux状态来做这些计算吗?当然可以!对不起,我住的地方是夜间,不得不去。我将编辑answ呃,出示州使用代码非常感谢Giorgi!我可以问你今后类似的问题吗?看起来你已经知道了;)不用客气!我很乐意帮助任何需要它的人,只要我有时间。嗯,我做了你写给我的事情,它几乎起作用了!现在我有问题了。你有时间帮我解决这个问题吗?