前言
去年微软开源了 react-native-windows, 支持将 React Native App 跑在 Windows 上。而在近日,其又宣布了支持 MacOS。
为了体验一波,所以使用 cnode 的 API 来写个 Demo 尝尝鲜。
创建项目
- 初始化项目并进入根目录
npx react-native init cnodeMac --version 0.61.5cd cnodeMac
- 安装 macOS 拓展
npx react-native-macos-init
- 启动项目
npx react-native run-macos

代码实现
我们使用 cnode 的列表 API 获取数据,渲染一个列表。代码如下:
import React, { useState, useEffect } from 'react';import {SafeAreaView,StyleSheet,View,Text,StatusBar,FlatList,Image,} from 'react-native';const Item = ({ author, title })=> {return (<View style={styles.container}><Image style={styles.avatar} source={{ uri: author.avatar_url }} /><View><Text style={styles.title}>{title}</Text><Text style={styles.title}>{author.loginname}</Text></View></View>);}const App = () => {const [refreshing, setRefreshing] = useState(false);const [state, setState] = useState({page: 0,data: [],});const getData = async (isRefresh) => {setRefreshing(true);const page = isRefresh ? 1 : state.page + 1;const response = await fetch(`https://cnodejs.org/api/v1/topics?page=${page}&mdrender=false`);const { success, data } = await response.json();if (success) {setState({page,data: [...state.data, ...data],});}setRefreshing(false);};useEffect(() => {getData(true);}, []);return (<><StatusBar barStyle="dark-content" /><SafeAreaView><FlatListrefreshing={refreshing}data={state.data}keyExtractor={item => item.id}renderItem={({ item }) => <Item {...item} />}onRefresh={() => getData(true)}onEndReached={() => getData()}/></SafeAreaView></>);};const styles = StyleSheet.create({container: {display: 'flex',flexDirection: 'row',backgroundColor: '#fff',padding: 10,},avatar: {width: 50,height: 50,marginRight: 10,},title: {fontSize: 14,},});export default App;
预览效果如下:
体验结果
总体开发过程中,总是会出现一些莫名其妙的异常导致红屏。开发体验较差,所以就只有写了一个简单的列表页。因此,目前还不建议投入正式使用。
结语
随着这两年 Flutter 的火起,React Native 团队也宣布了对 React Native 进行重构,而微软也加入到 React Native 的桌面端的支持中来。对于既有移动端及桌面端的项目,也是多了一种选择。而 React Native 由于使用 JavaScript,对于前端开发者而言,入门成本更低。
早期 React Native 由于一堆坑及其团队维护问题,也遭到诸如 Airbnb 等团队的放弃。React Native 也将在年底完成重构,其新架构对性能等方面的优化,倒也是值得期待。
