如何在本地响应中调用后台线程。使用后台线程创建应用程序以调用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调用的更好方法?
答案 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);
});
}