·

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

Published at 2025-03-13 00:18:32Viewed 102 times
Professional article
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.

弦圈热门内容

把加法与乘法结构拆掉再复原?望月新一如何引发代数几何变革

据《朝日新闻》,望月新一关于ABC猜想的论文可能将要发表,审核它的期刊是《数理解析研究所公刊》(PRIMS)。媒体对此的报道大抵聚焦在两点上:一是这个期刊就是他的工作单位主办的,一是这个论文几乎无人能懂。作为一个数学研究者,我个人并不担心望月新一的利益冲突问题,不但因为数学界有一套相当完备的系统用以避免利益冲突,在选定编辑和审稿人时有良好的避嫌标准,更重要的是:他没有动机。他已经功成名就,不需要什么文章。数学这种东西,对就对,错就错,不存在编数据或者实验造假,一切细节都在文章里。要是错了,无论强行发表在什么期刊上,也终有一天会被发现,而一发现就无可抵赖,只能重新修补。但是他的理论绝不仅仅是一个“几乎无人能懂”的怪物而已。它所试图解决的根本数学问题,它背后的当代数学界的面貌,它反映出的做数学研究是怎样的状态,这里面还有太多的故事并不是、也不应该是只有几个人能懂。甚至也许可以说,这些故事能让人直观地感受到:现代数学是什么。破题望月新一的研究领域,是所谓的“远阿贝尔几何学”。如果一句话解释这个领域的话,我只能这样写:有理数的绝对伽罗华群,以至任意代数簇的平展基本群,它们“远离阿贝尔”的部分, ...

将反向传递看成函子:强化学习的一个复合视角

这篇文章是数学家与计算机科学家合作写的,将范畴论应用于人工智能的强化学习。本文表示,强化学习算法与强化学习算法的复合,还是一个强化学习算法,因而所有强化学习算法构成一个范畴$\textrm{Learn}$。然后在$\textrm{Learn}$里考虑神经网络,并证明在一般情况下,梯度下降也是复合的。如果对纯数学理论,在计算机或者AI有什么应用感兴趣的人,可以看看。我当时下这篇文章,也是好奇代数领域在AI方面有啥应用,其实当时已经知道有个叫热带几何(Tropical Geometry)的领域,就是代数几何在计算机的应用。因为当时AI就很火,但AI可解释性需要很多数学来解决,他们解决不了,所以我留着这篇文章也是打算之后写篇类似的AI应用的文章。

Tammo Tom Dieck代数拓扑教材

EMS出版的代数拓扑教材Algebraic Topology,作者是Tammo Tom Dieck。本教材相较于Hatcher的书,没有那么太多的插图,并且内容更加抽象。本书知识密度高,内容精炼简洁,没有过多的废话。很适合有一定代数基础,且喜欢直接切入主题,快速学习的人。对于还未入门的小白而言,这本书不太适合作为代数拓扑的入门教材。我高中的时候就在看这本教材,但总在一些地方无法彻底理解。但这本教材吸引我的地方,一是它的内容涵盖面够广,并且知识密度够高,能够让我短时间内掌握代数拓扑方面的基础知识;二是它的描述更加的抽象,并且语句简洁明了、容易理解,很符合我的口味(这也是我当时选择代数几何的原因)。关于本教材与其他代数拓扑教材更具体、更专业的对比,请看Algebraic Topology I: 对教材跟概念的一些论述。PS:作者不再提供附件下载。

望月新一关于abc猜想的天书证明:宇宙际Teichmüller理论

望月新一以及他的Inter-universal Teichmüller Theory(宇宙际Teichmüller理论)可以说是非常出名,相较于费马大定理证明的晦涩难懂,宇宙际Teichmüller理论才算是真正的天书,全世界没几个人能看得懂,就连大佬Faltings都看不懂。望月新一是Faltings的学生,Faltings以“暴力横推”的风格闻名,张寿武说过Faltings的风格就像直接开着推土机把山碾平了过去。并且Faltings看论文都是只看前沿(introduction)就能知道整篇论文的主要定理,甚至还能直接证出来。见望月新一与他天书般的论文,展现了纯数学与我们的距离可见Inter-universal Teichmüller Theory有多难懂,它涉及到代数几何一个高深的领域:远阿贝尔几何(anabelian geometry),顾名思义就是考虑平展基本群$\pi_{1}^{et}(X,x)$远离阿贝尔的部分,远阿贝尔几何源于Grothendick的一封入职信Esquisse d'un Programme,他于其中提出一个宏大的理论,然而最终他却没能将其实现。而望月新一可 ...

Algebraic Topology I: 对教材跟概念的一些论述

关键词:Homotopy, Homology, Groupoid, Foundamental Group, Van Kampen Theorem, Covering Space, Covering Projection, Fibration with unique path lifting, Cofibration.Tammo tom Dieck 在他的代数拓扑教材中写了非常漂亮的前言,在点出代数拓扑精髓的同时还包含一些形而上学的哲思,并且简略地介绍了代数拓扑里面的两个核心词汇,同伦(homotopy) 跟同调 (homology)。我简要地部分翻译如下:代数拓扑是连续数学跟离散数学交相辉映的学科。在连续数学里面,我们用拓扑空间和连续映射这样普遍的形式语言将其公理化。而离散数学则是被我们用来表达代数和组合概念的。在数学语言中,我们用实数来概念化连续形式,但我们建立实数时却是要用到整数。下面举个例子,我们直觉地认为时间是一个连续的没有间断的流动过程,是由一系列不停止的瞬间后继构成的。但在实践中,我们却使用被定义为有周期性的离散模型工具跟自然过程。同样地,我们意识到空间是一个连续体,但我们 ...

怀尔斯的费马大定理证明

费马大定理的证明可以说是算术几何的一个重要里程碑,当年怀尔斯虽然很小的时候就被该问题所吸引,从而选择做一个数学家。但作为一个这么多年都无人能破解的难题,怀尔斯也是兜兜转转,他也没一开始就打算攻克这个猜想。据说,是代数几何取得突破性进展之后,他才觉得是时候攻克费马大定理了。最后他成功证明了谷山-志村猜想,从而证明了费马大定理。可以说怀尔斯能证明费马大定理,是刚好生在一个合适的时代,并站在了巨人的肩膀上,从前人手中接过火炬。怀尔斯关于费马大定理的证明,就是这篇论文Modular elliptic curves and Fermat’s Last Theorem。该论文非常晦涩难懂,没多少人能看得懂,可以说能彻底看懂费马大定理证明的人,都是圈内大佬。论文中涉及的知识面很广,包括椭圆曲线、模形式、伽罗华表示论、代数数论、类域论、群概形等等,想要理解费马大定理就得先理解前面这些理论。不过虽然我们看不懂,但该证明还是非常具有收藏价值的,看不懂也能看,也能欣赏嘛。并且对于做算术几何的人来说,可以用这篇论文来指导自己的学习和研究。Peter Scholze当年不也一上来就看费尔马大定理的证明,虽然un ...

评审8年终获发表,数学天才望月新一证明abc猜想,全球只有十几个数学家读懂但争议未消

abc猜想,数学界悬而未决的重要猜想,它的证明过程经过8年的同行评审,终于要在期刊上发表了。论文作者是日本的天才数学家望月新一,他33岁起就在京都大学担任数学教授。这一次望月新一的证明,全篇超过600页,2012年就已发表,但足足经过了8年的同行评审才通过,期间开过多次研讨会——但依然有很多数学家无法理解。据说,这篇论文全球只有十几位数学家深入研究了证明过程。许多数学家根本无法指出证明过程是对是错,因为根本看不懂。4月3日,日本京都大学召开了新闻发布会,宣布望月新一证明了它。包括Nature等在内的权威科学传媒组织,也这一重要进展进行了报道。望月新一没有出席昨天的发布会,他的另外两位同事说,当他知道自己的论文被接收,终于松了一口气。多年来他从未在公众场合露面。但也不是没有争议,因为当初接收论文的期刊——日本的PRIMS,主编正是望月新一本人。如果他的证明是正确的,那么将彻底改变数论。同时也正因为如此,才有了学界长达8年的争论。什么是abc猜想?abc猜想,最初由法国数学家约瑟夫·奥斯特莱和大卫·马瑟,在1985年提出。并且一经提出,abc猜想就成为数论领域的重要猜想之一。只是和哥德巴赫 ...

望月新一与他天书般的论文,展现了纯数学与我们的距离

导语:一位日本数学家声称已经解决了数学领域最重要的问题之一。但是,几乎无人能懂他的证明,无从判断对错。2012年8月30日的早晨,望月新一悄悄地在自己的网站上发布了4篇论文,总计长达500多页,密密麻麻地布满了各种符号。它们是作者孤独工作了十多年后的成果,可能会在学术界引起爆炸性的影响。在文中,望月新一声称解决了abc猜想——一个27年来在数论领域一直悬而未决的问题,令所有其他数学家都束手无策。如果望月新一的证明是正确的,它将是本世纪最令人震撼的数学成果之一,或将彻底改变整数方程的研究。David Parkins不过,望月新一本人并未对自己的证明大做文章。他任职于日本京都大学数理解析研究所(RIMS),是一位令人尊敬的数学家。他没有向全世界的同行宣布自己的研究成果,只是将论文发布在网上,等待世界去发现。第一个注意到他的论文的可能是玉川安骑男(Akio Tamagawa)——望月新一在RIMS的同事。和其他研究人员一样,玉川安骑男知道望月新一多年来一直在潜心钻研abc猜想,并且已近成功。当天,玉川安骑男通过电子邮件把这个消息发给了他的合作者之一、诺丁汉大学数论理论家Ivan Fesenk ...

分析学大师Elias M. Stein的分析系列教材

分析学大师Elias M. Stein(曾是陶哲轩的老师),写了四本分析学系列教材,统称为普林斯顿分析学讲座(Princeton Lectures in Analysis)。他们分别是:I Fourier Analysis:An Introduction II Complex Analysis III Real Analysis: Measure Theory, Integration, and Hilbert Spaces IV Functional Analysis: Introduction to Further Topics in Analysis当时集齐这四本书花了我不少时间,似乎这四本书知名度不一,我下的第一本是复分析教材Complex Analysis。现在我将这些好东西拿出来分享给有需要的人。PS:如果需要中译版的,目前只能找到《实分析》和《复分析》两本,链接:伊莱亚斯 M. 斯坦恩(Elias M. Stein)《复分析》与《实分析》教材更新:作者不再提供附件下载。