前言
去年微软开源了 react-native-windows
, 支持将 React Native App 跑在 Windows 上。而在近日,其又宣布了支持 MacOS。
为了体验一波,所以使用 cnode 的 API 来写个 Demo 尝尝鲜。
创建项目
- 初始化项目并进入根目录
npx react-native init cnodeMac --version 0.61.5
cd 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>
<FlatList
refreshing={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 也将在年底完成重构,其新架构对性能等方面的优化,倒也是值得期待。