·

给Web开发者写的React Native简介,React Native与React的区别与对比(1)

Published at 2025-03-13 00:18:32Viewed 132 times
Please reprint with source link

React Native是React下的一个跨平台框架,能让你用熟悉的React JSX语法来进行跨平台开发。所谓的跨平台开发是如今的一种趋势,即用同一种语言来同时进行Web端、手机端安卓与IOS、桌面端Windows、MacOS、Linux的开发。这样不仅能极大的提高开发效率,同时大大增加了代码的可维护性,节省了大量的成本。

然而React Native虽然带个React,用的也是JSX语言,却跟React有很多不一样的地方。因为React Native不仅面向网页端,还面向手机端APP,而React Native的代码会直接编译为native原生代码。在本文中,我将会列举说明几个React Native的不同之处。

首先,在React Native中我们不能像React那样直接使用HTML语言,因为无论是Android还是IOS,都无法编译HTML语言。因此,我们需要使用React Native提供的组件。在React Native中,如果你想要写<div>,则需要换成<View>View组件在Web端会被编译成<div>,而在Android和IOS则分别对应android.viewUIView

更多的,如果你想要写<p>或者<span>,那么你需要写<Text>Text组件可以嵌套(nested),而两个Text在一起会跟p一样换行

<View>
  <Text>1</Text>
  <Text>2</Text>
</View>

需要注意的是,在Web端你可以在任意HTML标签里写字符串,如<div>Hello!</div>,但是在React Native你不能在Text外写任何字符串,不然会报错。有了<View><Text><div><p>)你很自然的想要修改他们的样式。在Web端React,你可以写CSS然后通过className来设置样式,或者直接写style来改变样式。而在React Native中,你只能通过style来设置样式,并且CSS属性还跟Web端有很多不同。

而设置style的方式也跟Web端React有一些不同,倒是跟Vue挺像。首先跟React一样的是,你可以像className那样写style:<View style={styles.container}></View>,也可以直接写<View style={{ marginTop: 50 }}></View>。而第一种写法,你需要在函数体(functional component)外将style写下来,具体例子见下(来自官网):

import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

const LotsOfStyles = () => {
  return (
    <View style={styles.container}>
      <Text style={styles.red}>just red</Text>
      <Text style={styles.bigBlue}>just bigBlue</Text>
      <Text style={[styles.bigBlue, styles.red]}>bigBlue, then red</Text>
      <Text style={[styles.red, styles.bigBlue]}>red, then bigBlue</Text>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    marginTop: 50,
  },
  bigBlue: {
    color: 'blue',
    fontWeight: 'bold',
    fontSize: 30,
  },
  red: {
    color: 'red',
  },
});

export default LotsOfStyles;

是不是感觉跟Vue有一点像😂。说完style的语法,接下来就是CSS的属性了。

在React Native中,Viewdisplay属性默认是flex,并且只有flex或者none可选,并没有Web端的block值。而flexDirection跟往常的一样,除了默认是column,跟Web端相反。因此,在React Native所有layout都是基于flex的,要么不显示(none),要么flex,这跟Web端有很大不同。默认flex也意味着,你想要居中任何东西会变得非常方便,如果你使用React Native版Tailwind CSS——NativeWind,那么你只需要加上className="items-center"。在React Native中,flex: 1将会变得尤为重要,一个screen中的第一个View往往不能全屏,这时就需要flex: 1,而有时字体溢出需要加上flex: 1才会正常。

除了flex外,React Native中的marginpadding也与React不同,以margin为例,你不能这样写margin: 10 20,你只能这样写marginHorizontal: 20; marginVertical: 10,而其他属性像marginLeft这些跟原来一样。在某些情况下,我觉得这种写法比Web端还要方便。接着,React Native的边框属性border也跟React有些不同,你不能直接这样写border: 1 solid #ddd,你只能这样一个个列出来borderWidth: 1; borderStyle: 'solid'; borderColor: '#ddd'

而在React Native中position属性只有absolute, relative, static可选,这也意味着如果你想要实现sticky相关的layout,如sticky headercollapsible tabview等,会变得十分困难。而这在Web端,你只需要加个position: sticky或者加个static转到fixed的监听器就能做到。

说完View,我们说Text。在React Native中,想要实现文本单行溢出省略或者多行溢出省略,比Web端简便得多。你只需要设置numberOfLines即可:

<Text numberOfLines={1}>666666666666666666666666666666666666666666666666666</Text>
<Text numberOfLines={4}>999999999999999999999999999999999999999999999999999</Text>

需要注意的是,这是唯一方法,你不能像Web端一样设置-webkit-line-clamp: 4或者text-overflow: ellipsis


由于篇幅过长,我将会在下一篇文章中继续本文的话题。

0 人喜欢

Comments

There is no comment, let's add the first one.

弦圈热门内容

2024-11-22凌晨:弦圈最近两周更新情况

在上篇弦圈11月10日上下更新计划:小金库、打赏等功能,我提到会更新网站多个功能。原本以为这些功能最多一周就能全部写完,结果当我真正开始写,才发现自己完全低估了这些功能实现的难度,以及所需要耗费的时间。而且由于我的完美主义倾向,导致我比原计划多开发了好几个功能,比如说编辑器插入公式、交易中心、收藏党最喜爱的收藏夹等。因为我想反正都大更新了,那干脆就更新得多一些,把以前埋的坑都填上。再然后支付功能比我想象中的要难得多,这不仅仅指代码难写,还包括支付宝的审核等问题,人事问题上也耗费了不少时间。在这里忍不住吐槽一下支付宝和微信支付,这国内两家巨头技术文档写的是真烂、真水。多少年了,支付宝支付SDK的demo示例还是Java、PHP,Python压根没写,只能自己摸索然后网上找到些零散的资料。微信支付先是需要微信认证强制每年收费300元,然后文档也是写得不清不楚。反正目前网站就暂时只支持支付宝吧,之后再把微信支付补上吧,因为真的被恶心到了。总之如今写了快两个星期了,这些功能终于要完成了,预计明后天就能上线测试。网站也完全没更新,也找不到人帮忙更新,只能先放着了。之后我会发一篇更新日志,更加详细 ...

弦圈11月10日上下更新计划:小金库、打赏等功能

这几天忙于写代码完善网站功能,不太有空更新文章和内容。因为弦圈没有借助任何建站工具和博客框架,是我自己前后端一起从零开始写的,因此开发得会比较慢,请谅解。。。目前计划上线功能首先就包括,前面弦圈更新日志:关于智力值和金币提到的小金库。获取金币的机制是:智力值存入银行(叫时空银行time bank?),然后根据日利率每天产生相应的金币。下图为测试画面其次为了让网站能够更好的运作下去,从而给大家提供更好的服务,我计划引入盈利功能。所谓盈利功能即是用户通过弦圈来获得收益的相关功能,包括打赏功能、接广告功能、接悬赏功能。这些功能主要是为了鼓励大家为社区做贡献,并且让需要得到帮助的人更容易获得帮助(毕竟大佬们忙得很,不会轻易帮助你解决问题)。具体规则暂定如下:想要让弦圈的用户能赚钱,那弦圈必须自己先能赚到钱,目前我计划引入弦圈广告和用户交易中心。至于弦圈广告,我打算采用信息流广告、侧边栏广告、文章内嵌广告,拒绝弹窗之类遮蔽视线的广告,因此不会影响用户体验。最后我还得把之前留的坑——创作中心给填上,就是一个给创作者的方便管理内容、查看数据的模块。测试画面如下:尽情期待😇

Grothendieck经典著作:代数几何原理EGA 1(1971第二版)法语+英译

在前面几贴中,我已经分别分享了Grothendieck的代数几何三部曲EGA、SGA、FGA,链接如下:代数几何教皇Grothendieck经典著作:代数几何原理EGA法语原版全系列(1)代数几何教皇Grothendieck经典著作:代数几何讨论班SGA法语原版全系列代数几何教皇Grothendieck经典著作:代数几何基础FGA法语原版+英文译版但其实EGA 1还有1971年的第二版,Grothendieck在EGA 1第二版中更新了一些内容,因此一些概念定义会与第一版中有出入。原本我也是不太知道EGA竟然还会有第二版,直到后来有次看文献时,发现作者引用了EGA 1(1971)才知道有这一版本。对比EGA 1第一版跟第二版,感觉第二版要比第一版更好读一些,似乎思路行文更清晰,也更好理解。并且值得开心的是,EGA 1第二版有完整英译,现在我全都分享出来。更新:作者不再提供文件下载。

记录一下:弦圈在知乎正当宣传遭遇被恶意举报?

记录一下昨天在知乎上遇到的离谱事情,我的一个回答无端端的被删除了,很有可能是因为推广网站导致得罪了某些人,从而举报我垃圾广告。当然也有朋友说,这其实就是知乎因为我引流所以封我,这确实不好说。最后申诉也没用,只能说这真的离谱到家了。我回答的提问是《有哪些网站比较有深度?》,正常理解这问题就是要你推荐网站的,那我推荐自己的网站,带上链接,多说几句介绍一下,不是很合理吗?我的回答可以说完全契合这个问题,甚至说该问题就是给我这种想要推广的人量身定做的。如果说我是因为在别的毫不相干的问题下,强行推广我的网站,那删我还情有可原。结果我发了那么多个回答,偏偏这个最不可能的。我想是不是因为那个提问是广告提问,回答是广告回答,所以我宣传了导致强了别人的风头。但我查了查问问题的人跟回答问题的不是同一个,而且网站名都似乎是大网站,还不至于这样,只能说遇到一些“不认同数学网站是有深度网站”的人吧😅以下是我当晚发在知乎的原文。这几天,我在知乎加大了弦圈 弦圈 - 找到属于你的圈子 (manitori.xyz) 的宣传力度,但也不是像生产电子垃圾那样胡乱安插广告。每个回答,我都认真看、认真写的,并且保证回答跟问题 ...

代数几何教皇Grothendieck经典著作:代数几何基础FGA法语原版+英文译版

关于Grothendieck的代数几何三部曲EGA、SGA、FGA的法语原版,我已经分享了两部,分别在 代数几何教皇Grothendieck经典著作:代数几何原理法语原版全系列(1)与 代数几何教皇Grothendieck经典著作:代数几何讨论班法语原版全系列 中可以下载。没想到相比于EGA,大家对SGA的热情非常高涨,可能是EGA已经出版了完整的中译,并且EGA知名度最高,资源也更好找。而SGA不同,知名度小一些,并且阅读难度也大一些,同时资源相对稀缺不好找,目前也没有完整的中译。现在我打算把三部曲中存在感最低的FGA也分享出来,这次我十分意外的发现FGA时隔多年居然有英文翻译版了,这是十分令人惊喜的。FGA法语全称Fondements de la Géometrie Algébrique,英文翻译为Foundations of Algebraic Geometry,即代数几何基础。这本书我也没仔细看过,几年前拿到手时,也只是粗糙无比的扫描版,扫描的书还是上个世纪用打字机打出来的,阅读观感非常不好(可能是不习惯吧)。虽然如今FGA中的大部分内容,学代数几何的人应该都会知道,如desc ...