Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript redux thunk获取api操作和还原程序_Javascript_React Native_Redux_React Redux_Redux Thunk - Fatal编程技术网

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!我可以问你今后类似的问题吗?看起来你已经知道了;)不用客气!我很乐意帮助任何需要它的人,只要我有时间。嗯,我做了你写给我的事情,它几乎起作用了!现在我有问题了。你有时间帮我解决这个问题吗?