如何使用Redux在React本机中使用线程调用API?

时间:2020-01-21 07:31:01

标签: reactjs api react-native react-redux react-router

如何在本地响应中调用后台线程。使用后台线程创建应用程序以调用API。建议我实现这一目标。

  import React, { Component } from 'react'
    import { WebView } from 'react-native'

    export default class BackgroundTaskRunner extends Component {
      render() {
        return (
          <WebView
            ref={el => this.webView = el}
            source={{html: '<html><body></body></html>'}}
            onMessage={this.handleMessage}
          />
        )
      }
      runJSInBackground (code) {
        this.webView.injectJavaScript(code)
      }
      handleMessage = (e) => {
        const message = e.nativeEvent.data
        console.log('message from webview:', message)
      }
    }

这是调用后台线程的方法,还是有使用线程执行API调用的更好方法?

2 个答案:

答案 0 :(得分:0)

React-native不支持多线程。因此,要调用api,您可以使用redux来调度动作,该动作又通过axios调用api。因此,可以通过Redux方法,也可以使用简单的axios库。

我建议您使用axios,因为它会很整洁,您可以通过以下方式简单地做到这一点:

import axios from './axiosWrapper';

export const getItineryRequest = async tripId => {
  const params = {
    packageId: '26169',
    packageId: tripId,
    ip: 'true',
  };
  return await axios.get('app/user-package-details/', {params});
};

axios.get是一个获取请求。希望能帮助到你。毫无疑问

答案 1 :(得分:0)

现在有react-native-threads,它是最接近多线程的。参见why Javascript doesn't support multithreading

您要实现的目标实际上是很常见的,并且是通过公共库实现的,Javascript并发执行代码,而不是并行执行代码,除非您做大量的CPU工作,否则它们不会有所区别。

这是一个片段,可以在React Native中使用。注意fetch是一个全局变量。 React Native docs是入门的好地方。

function getMoviesFromApiAsync() {
  return fetch('https://facebook.github.io/react-native/movies.json')
    .then((response) => response.json())
    .then((responseJson) => {
      return responseJson.movies;
    })
    .catch((error) => {
      console.error(error);
    });
}