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

Posted

技术标签:

【中文标题】如何使用 Redux 在 React Native 中使用线程调用 API?【英文标题】:how to call API using thread in React native using redux? 【发布时间】:2020-05-07 05:15:48 【问题描述】:

如何在 react native 中调用后台线程。使用后台线程创建应用程序来调用 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 调用?

【问题讨论】:

请分享您尝试过的代码 react-native 不支持多线程,所以我认为最好的方法是使用 redux 并调度一个动作 好的,我没有尝试过,所以请提供代码片段的想法会有所帮助 你应该先用你自己对这个问题的假设来尝试,先尝试你的假设来测试你的知识,如果你所有的努力都没有采取任何行动,然后发布寻求帮助。只有这样学习才能提高你。 顺便说一句,ReactNative 应用程序使用 JS 实现,因此 ReactNative 中没有多线程。您必须了解 JS 中的异步,利用 redux、redux-saga 来处理您的应用程序状态、调用 API 并存储到状态中。如果您想获得多处理的好处,请尝试使用 Swift (ios)、Java (android) 编写本机库,然后将其集成到您的应用程序中 【参考方案1】:

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 是一个获取请求。希望能帮助到你。如有疑问,请随意

【讨论】:

谢谢。你能举一个使用redux而不是使用任何第三方库来完成这个任务的例子吗 axios 是最常用的库之一,也是值得信赖的,如果你想使用 redux ,还需要 3rd 方和 .到底axios【参考方案2】:

react-native-threads 是目前最接近多线程的。见why Javascript doesn't support multithreading。

您要实现的目标实际上很常见,并且由公共库实现,Javascript 并发执行代码而不是并行执行代码,除非您正在执行 CPU 繁重的工作,否则不会有区别。

这是一个可以在 React Native 中开箱即用的 sn-p。注意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);
    );

【讨论】:

这只是 API 调用,并没有在后台使用任何线程。

以上是关于如何使用 Redux 在 React Native 中使用线程调用 API?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 App.js (React-Native) 中访问 redux 状态

如何使用 redux 模式在 react native 中刷新组件?

如何在reducer中专门使用redux来获取react-native中的API?

如何在react-native 中优雅的使用 redux

无法在 react native 中使用 redux 连接多个组件

如何在 React Native 中使用 redux 在 props 中定义变量/方法