如何使用React Native来创建移动应用中常用的页面布局

929 阅读8分钟

在这个系列中,你将学习如何使用React Native来创建移动应用中常用的页面布局。你将创建的布局不会是功能性的--相反,这个系列的主要重点是让你在React Native应用程序中布置内容时弄脏自己的手。

如果你对React Native应用的布局或一般的风格设计感到陌生,请查看我们关于React Native中的布局的教程。

  • [

要跟上这个系列,我向你挑战,在阅读我在教程中的一步步说明之前,先尝试自己重新创建每个屏幕。仅仅通过阅读这个React Native登录表单教程,你并不会真正受益于它!先试一试,再在这里找答案。如果你成功地使它看起来像原来的屏幕,把你的实现和我的进行比较。然后自己决定哪一个更好!

在本系列的第一部分,你将创建以下的登录页面。

React Login Form Tutorial react native login

入门

在这个React Native登录页面的教程中,我们将使用Expo CLI。Expo是一套围绕React Native和原生平台的工具和服务,帮助你从同一个JavaScript或TypeScript代码库中开发、构建、部署并快速迭代iOS、Android和Web应用。

Expo是构建React Native应用的最简单、最快速的方式。官方的Expo入门指南包含了关于如何下载和配置主要操作系统的Expo CLI的详细说明。

创建一个新的项目。

expo init LoginLayout

你会被提示选择要初始化的项目类型。选择托管工作流空白。等待几秒钟,让Expo安装项目文件,并将目录改成新项目。

cd LoginLayout

项目的结构应该是这样的。

React Login Form Tutorial project structureReact Login Form Tutorial project structureReact Login Form Tutorial project structure

打开App.js ,开始处理你的应用程序。开始的代码App.js ,看起来应该是这样的。

import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

export default function App() {
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

在第二行代码中,我们导入React ,以使用JSX。然后我们从React Native导入StyleSheetTextView 组件。

接下来是App 函数,它返回一个视图组件和一个文本组件作为该组件的子组件。<View> 是React Native中的一个重要组件,它可以有很多用途,比如对不同的元素进行造型,包装元素,或嵌套元素。<View> 元素相当于HTML网页开发中的<div> 。正如你所看到的,View 组件有一个属性,style = {styles.container} ,它被用来对视图应用样式。

<Text> 组件允许我们渲染文本。

使用Flexbox的布局

Flexbox是React Native的一个关键技术。它被设计用来在不同的屏幕尺寸上提供一个一致的布局。Flexbox在React Native中的工作方式与它在网络上的CSS中的工作方式相同,但有一些例外。(你可以在这里了解CSS Flexbox。)不过默认值是不同的,flex方向默认为列而不是行,flex参数只支持一个数字。

  • [

Flex定义了项目如何沿着主轴填充可用空间。可用空间是根据每个元素的flex属性来划分的。

我们在文件底部的styles 常量中定义了flexbox布局。容器有以下样式。

  • flex: 1:这定义了元素将如何填充在空间上。空间通常根据每个元素的flex属性来划分。
  • justifyContent: "center":这使容器的子元素在容器的主轴中心对齐。
  • alignItems: "center":使容器的子元素在容器的十字轴的中心对齐。

用户界面和通用组件

一个典型的React Native将使用以下组件。

View其他组件的一个容器
Text显示文本
Image显示图片
Stylesheet提供一个元素的造型方式
TextInput一个输入字段
Button一个可点击的按钮

添加图片

React Native中的图片被放置在assets文件夹中,像这样被引用。

<Image source={require('.assets//image.png')} />

让我们在assets文件夹中添加一张图片。这将被用作标识图片。首先删除文本组件,然后用logo图片代替它。不要忘记导入顶部的Image 组件。

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

export default class App extends React.Component {
  render(){
    return (
      <View style={styles.container}>
        <Image source = {require("./assets/logo.png")}/>
      </View>
    );
  }
}


React Native中的样式设计

React Native中的元素是用JavaScript进行造型的。所有的React Native元素都接受一个名为style 的道具,它接受一个带有样式名称和值的对象。这些样式名称和值与CSS中使用的样式名称和值类似,只是名称使用骆驼的大小写。例如,React Native使用backgroundColor 作为CSS属性background-color

在图片上添加以下样式。

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
   },

   image :{
    marginBottom: 40

  }
    
});

这里我们添加一个marginBottom: 40 样式,在图片和文本输入之间留出一些空间。

接下来,为电子邮件和密码添加文本输入字段。首先,添加状态属性来保存电子邮件和密码。React Native中的状态是用在随时间变化的组件上。例如,TextInput 中的信息随着用户输入信息而不断变化。电子邮件和密码的初始状态将是空的。

首先导入useState ,如下图所示。useState 函数将允许我们的功能组件是有状态的。

import React, { useState } from 'react';

然后通过在App 函数中添加以下代码来初始化状态。

export default function App() {
     const [email, setEmail] = useState('');
     const [password, setPassword] = useState('');
  return (
    // rest of the code
  );
}

我们用一个View 来包装每个文本输入,以方便样式设计。在图片下面添加这段代码。

      <View style={styles.inputView}>
        <TextInput
          style={styles.TextInput}
          placeholder="Email."
          placeholderTextColor="#003f5c"
          onChangeText={(email) => setEmail(email)}
        />
      </View>

      <View style={styles.inputView}>
        <TextInput
          style={styles.TextInput}
          placeholder="Password."
          placeholderTextColor="#003f5c"
          secureTextEntry={true}
          onChangeText={(password) => setPassword(password)}
        />
      </View>

setState 方法将用用户输入的任何信息更新状态对象。为了安全起见,secureTextEntry 被设置为真,以隐藏在电子邮件文本输入中输入的文本。

inputViewtextInput 道具中添加以下样式。

 inputView: {
    backgroundColor: "#FFC0CB",
    borderRadius: 30,
    width: "70%",
    height: 45,
    marginBottom: 20,
    alignItems: "center",
  },

  TextInput: {
    height: 50,
    flex: 1,
    padding: 10,
    marginLeft: 20,
  }

在文本输入字段下面添加忘记密码的按钮。我们将使用一个TouchableOpacity 按钮,按下后会改变不透明度。

      <TouchableOpacity>
        <Text style={styles.forgot_button}>Forgot Password?</Text>
      </TouchableOpacity>

接下来,为忘记密码按钮添加以下样式。

  forgot_button: {
    height: 30,
    marginBottom: 30,
  }

最后,添加 "登录"按钮。在忘记密码按钮下面添加下面的代码。

      <TouchableOpacity style={styles.loginBtn}>
        <Text style={styles.loginText}>LOGIN</Text>
      </TouchableOpacity>

添加登录按钮的样式。

 loginBtn:
  {
    width:"80%",
    borderRadius:25,
    height:50,
    alignItems:"center",
    justifyContent:"center",
    marginTop:40,
    backgroundColor:"#FF1493",
  }

在这里,我们添加一个边框半径样式,使按钮成为圆形,并添加一个marginTop: 40 属性,使两个按钮之间形成一个空间。我们还设置了一个自定义的高度和宽度。

最后的登录屏幕代码

登录页面的最终React Native代码,App.js,应该看起来像这样。

import { StatusBar } from "expo-status-bar";
import React, { useState } from "react";
import {
  StyleSheet,
  Text,
  View,
  Image,
  TextInput,
  Button,
  TouchableOpacity,
} from "react-native";

export default function App() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");

  return (
    <View style={styles.container}>
      <Image style={styles.image} source={require("./assets/log2.png")} />

      <StatusBar style="auto" />
      <View style={styles.inputView}>
        <TextInput
          style={styles.TextInput}
          placeholder="Email."
          placeholderTextColor="#003f5c"
          onChangeText={(email) => setEmail(email)}
        />
      </View>

      <View style={styles.inputView}>
        <TextInput
          style={styles.TextInput}
          placeholder="Password."
          placeholderTextColor="#003f5c"
          secureTextEntry={true}
          onChangeText={(password) => setPassword(password)}
        />
      </View>

      <TouchableOpacity>
        <Text style={styles.forgot_button}>Forgot Password?</Text>
      </TouchableOpacity>

      <TouchableOpacity style={styles.loginBtn}>
        <Text style={styles.loginText}>LOGIN</Text>
      </TouchableOpacity>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center",
  },

  image: {
    marginBottom: 40,
  },

  inputView: {
    backgroundColor: "#FFC0CB",
    borderRadius: 30,
    width: "70%",
    height: 45,
    marginBottom: 20,

    alignItems: "center",
  },

  TextInput: {
    height: 50,
    flex: 1,
    padding: 10,
    marginLeft: 20,
  },

  forgot_button: {
    height: 30,
    marginBottom: 30,
  },

  loginBtn: {
    width: "80%",
    borderRadius: 25,
    height: 50,
    alignItems: "center",
    justifyContent: "center",
    marginTop: 40,
    backgroundColor: "#FF1493",
  },
});

这里是应用程序的最终外观。

React Login Form Tutorial react native login 来自CodeCanyon的流行React Native应用程序布局模板

构建一个伟大的应用程序需要的不仅仅是一个React Native登录屏幕。如果你需要更多的组件来完成你的项目,请查看CodeCanyon的这些模板。它们很容易使用,可以帮助你实现你的目标。

1.MStore Pro-完整的React Native电子商务模板

MStore Pro是CodeCanyon上最受欢迎的React Native模板之一。它的设计考虑到了电子商务。它有一个有用的React Native登录屏幕模板,与短信注册一起工作。它也有多个主屏幕和布局可供选择。

[MStore Pro React Native Template for eCommerce

2.Antiqueruby React Native Material Design UI组件

材料设计仍然主导着应用程序的格局,这使得Antiqueruby成为2021年的绝佳选择。该下载包括260多个屏幕,包括React Native登录、导航抽屉等。

Antiqueruby React Native Material Design UI ComponentsAntiqueruby React Native Material Design UI ComponentsAntiqueruby React Native Material Design UI Components

3.React App Builder-SaaS

React App Builder的作用正如其名。用这个模板下载中包含的组件做出令人敬畏的创意项目。它包括在任何行业制作一个完整的应用程序所需的一切。

[React App Builder SaaS

4.BeoNews Pro-React Native Mobile App for WordPress

如果你有一个WordPress网站,你想成为移动网站,请尝试BeoNews Pro。它是CodeCanyon上的顶级模板之一,它充满了伟大的功能。除了它的React Native登录界面模板外,BeoNews Pro还包括。

  • 多种侧边菜单样式
  • 时尚的 UI 布局
  • Facebook、Google和Firebase分析集成

[BeoNews Pro React Native Mobile App for WordPress

5.Oreo Fashion-完整的React Native App for WooCommerce

用Oreo Fashion展示你的风格感。这是一个完整的模板,让你为iOS和Android设备创建应用程序。所包含的React Native登录表单为账户创建提供了简单的社交注册。你也可以利用布局应用程序生成器的优势。如果你有一个WooCommerce WordPress网站,想围绕它建立一个应用程序,可以试试。

Oreo Fashion Full React Native App for WooCommerceOreo Fashion Full React Native App for WooCommerceOreo Fashion Full React Native App for WooCommerce

总结

在本教程中,你已经利用你的Flexbox知识成功创建了一个漂亮的登录页面。你还学会了如何使用Expo CLI,这是一种构建和测试React Native应用的简单方法。