从ReactNative到React

最近在写自己的一个前端小Demo,因为之前在工作中使用了ReactNative,就选择了React作为技术选型,也就走上了这么一条自上而下的路。本文主要内容为ReactNative和Reactjs的一些不同以及从ReactNative到Reactjs的一些开发中的经验,因此适合从原生转向前端或者对前端有些兴趣的同学,希望能帮大家少踩一些坑,少费一些力。

安装脚手架和搭建基础工程

//-g是将create-react-app安装到全局,该电脑的任何用户都可以使用
npm install -g create-react-app
create-react-app my-app

cd my-app
npm start

这样我们就有一个基础的工程和基础的页面了,下面我们就开始讨论详细的问题了

1.自定义字体问题

自定义字体首先我们需要下载相应的字体并放到工程当中,然后在工程的App.css文件当中添加@font-face,实例如下:

@font-face
{
font-family: EBGaramond;                //EBGaramond为自定义名称
src: url('EBGaramond08-Italic.ttf')
}

然后我们就可以在App.js当中和其他页面文件当中使用fontFamily: 'EBGaramond'

我们也可以自己新建一个css文件,但是要记得在App.js和页面文件当中导入

2.文件重复导入问题

import './App.css';
import './Font.css';

这种导入整个文件的方式导入后是全局的,顶级文件导入后其他地方就不再需要导入了,与导入类不同,导入类需要在每个使用的页面导入

3.布局方式问题-1

ReactNative当中默认使用的是flex布局,flex-direction为column,而在Reactjs当中布局方式为一个从上往下的流式布局(该名词有待商榷,因为暂时不了解一些前端术语,故先这么称呼),这就需要我们修改它的布局方式。我的第一反应是在css添加这样一个样式

.content {
  display: flex;
  flex-direction: column
}

但是这种方式需要每个页面都需要写一个content的选择器,后来我就改成了这种方式

body *:not(style) {
  display: flex;
  flex-direction: column    //Reactjs当中flex-direction默认为row,需要修改
}

至于为什么是body *:not(style),那是因为*会把headerbodyfooter当中的所有内容都会当做html元素,所以我们只需要让body当中的所有内容使用flex布局即可,至于为什么有not(style),那是因为它还会把body当中的style作为html元素,所以要除开。

4.布局方式问题-2

在使用了flex布局之后,你会发现当一行元素填充满的时候,这些元素并不会换行,那是因为在Reactjs当中flexWrap默认为nowrap,需要设置为wrap

body *:not(style) {
      display: flex;
      flex-direction: column;    //Reactjs当中flex-direction默认为row,需要修改
      flexWrap: wrap
}

在js样式文件中为

const styles = {
    content: {
        flexWrap: 'wrap'
    }
};

其他后续更新中

……