快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]

前言

本篇题目太大,所以打算分为三篇来讲解.写下此篇文章更多的是对知识的一个回顾与分享.有一部分内容转载GItHub上的,链接在末尾.还请各路大神多多指教.

  • 快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]
  • 快抱紧我,教你撸出一个简单的React-Naitive [应用搭建篇]
  • 快抱紧我,教你撸出一个简单的React-Naitive [打包发布篇]

这里没有讲到如何搭建Node&android环境等,不过你可以参考官方此篇文章.相信你一步步来,
一定可以搭建好的.
http://reactnative.cn/docs/0.39/getting-started.html

本篇适合那些人看?

  • 拥有前端经验
  • 从android|IOS转来RN玩玩
  • 有ES6基础(没有也没关系)
  • 掌握基本的JS
  • 只要你想学还有什么能阻止你的激情?

通过本篇你能学到什么?

  • ES6常用基础语法
  • React-Naitive组件基础

ES6是什么鬼?

ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 --《CMAScript 6 入门》强烈推荐想系统学习的同学参考该站.http://es6.ruanyifeng.com/

说好的常用基础语法呢?

实际ES6的东西可能太多,可能会成为我们学习React-Native上的一个绊脚石.其实也可以先学一些常用的基础语法.等知识不足以完成我们的项目的时候回过头来翻文档看.也许这样才更适合我们成长.但文档我们有时间的时候还是一定要细看.毕竟这是你升职、加薪、装逼必备的技能呀. 好了废话不说辣么多啦.开整!搞事!

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第1张图片

变量声明

const 和 let

不要用 var,而是用 constlet,分别表示常量和变量。不同于 var 的函数作用域,constlet 都是块级作用域。

const DELAY = 1000;

let count = 0;
count = count + 1;

模板字符串

模板字符串提供了另一种做字符串组合的方法。

const user = 'world';
console.log(`hello ${user}`);  // hello world

// 多行
const content = `
  Hello ${firstName},
  Thanks for ordering ${qty} tickets to ${event}.
`;

默认参数

function logActivity(activity = 'skiing') {
  console.log(activity);
}

logActivity();  // skiing

箭头函数

函数的快捷写法,不需要通过 function 关键字创建函数,并且还可以省略 return 关键字。

同时,箭头函数还会继承当前上下文的 this 关键字。

比如:

[1, 2, 3].map(x => x + 1);  // [2, 3, 4]

等同于:

[1, 2, 3].map((function(x) {
  return x + 1;
}).bind(this));

模块的 Import 和 Export

import 用于引入模块,export 用于导出模块。

比如:

// 引入全部
import dva from 'dva';

// 引入部分
import { connect } from 'dva';
import { Link, Route } from 'dva/router';

// 引入全部并作为 github 对象
import * as github from './services/github';

// 导出默认
export default App;
// 部分导出,需 import { App } from './file'; 引入
export class App extend Component {};

ES6 对象和数组

析构赋值

析构赋值让我们从 Object 或 Array 里取部分数据存为变量。

// 对象
const user = { name: 'guanguan', age: 2 };
const { name, age } = user;
console.log(`${name} : ${age}`);  // guanguan : 2

// 数组
const arr = [1, 2];
const [foo, bar] = arr;
console.log(foo);  // 1

我们也可以析构传入的函数参数。

const add = (state, { payload }) => {
  return state.concat(payload);
};

析构时还可以配 alias,让代码更具有语义。

const add = (state, { payload: todo }) => {
  return state.concat(todo);
};

RN是什么?

React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。

务必按照官网来入门!
务必按照官网来入门!
务必按照官网来入门!

重要的事情说三遍.RN中文官网 http://reactnative.cn/
到目前笔者写到这里RN在2017年1月5号已经上线0.40,当前版本官方的中文文档还没全面.如果你和我一样.英语水平并没有那么腻害.0.39的的文档也可以看.但要注意0.40中可能发生了某些改变的新特性.可以参考使用.

React Component

Stateless Functional Components

React Component 有 3 种定义方式,分别是 React.createClass, classStateless Functional Component。推荐尽量使用最后一种,保持简洁和无状态。这是函数,不是 Object,没有 this 作用域,是 pure function。

比如定义 App Component 。

function App(props) {
  function handleClick() {
    props.dispatch({ type: 'app/create' });
  }
  return 
${props.name}
}

等同于:

class App extends React.Componnet {
  handleClick() {
    this.props.dispatch({ type: 'app/create' });
  }
  render() {
    return 
${this.props.name}
} }

JSX

Component 嵌套

类似 HTML,JSX 里可以给组件添加子组件。


  

className

class 是保留词,所以添加样式时,需用 className 代替 class

Hello dva

JavaScript 表达式

JavaScript 表达式需要用 {} 括起来,会执行并返回结果。

比如:

{ this.props.title }

Mapping Arrays to JSX

可以把数组映射为 JSX 元素列表。

    { this.props.todos.map((todo, i) =>
  • {todo}
  • ) }

Spread Attributes

这是 JSX 从 ECMAScript6 借鉴过来的很有用的特性,用于扩充组件 props 。

比如:

const attrs = {
  href: 'http://example.org',
  target: '_blank',
};
Hello

等同于

const attrs = {
  href: 'http://example.org',
  target: '_blank',
};
Hello

Props

数据处理在 React 中是非常重要的概念之一,分别可以通过 props, state 和 context 来处理数据。而在 dva 应用里,你只需关心 props 。

propTypes

JavaScript 是弱类型语言,所以请尽量声明 propTypes 对 props 进行校验,以减少不必要的问题。

function App(props) {
  return 
{props.name}
; } App.propTypes = { name: React.PropTypes.string.isRequired, };

内置的 prop type 有:

  • PropTypes.array
  • PropTypes.bool
  • PropTypes.func
  • PropTypes.number
  • PropTypes.object
  • PropTypes.string

往下传数据

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第2张图片

往上传数据

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第3张图片

CSS Modules

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第4张图片

理解 CSS Modules

一张图理解 CSS Modules 的工作原理:

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第5张图片

button class 在构建之后会被重命名为 ProductList_button_1FU0ubutton 是 local name,而 ProductList_button_1FU0u 是 global name 。你可以用简短的描述性名字,而不需要关心命名冲突问题。

然后你要做的全部事情就是在 css/less 文件里写 .button {...},并在组件里通过 styles.button 来引用他。

定义全局 CSS

CSS Modules 默认是局部作用域的,想要声明一个全局规则,可用 :global 语法。

比如:

.title {
  color: red;
}
:global(.title) {
  color: green;
}

然后在引用的时候:

 // red
        // green

classnames Package

在一些复杂的场景中,一个元素可能对应多个 className,而每个 className 又基于一些条件来决定是否出现。这时,classnames 这个库就非常有用。

import classnames from 'classnames';
const App = (props) => {
  const cls = classnames({
    btn: true,
    btnLarge: props.type === 'submit',
    btnSmall: props.type === 'edit',
  });
  return 
; }

这样,传入不同的 type 给 App 组件,就会返回不同的 className 组合:

 // btn btnLarge
   // btn btnSmall

本文引用内容:

  • dva-knowledgemap
    注:没有任何人可以不通过实践和努力学习到精华,更不可能看完本篇就完全掌握住.React-Native(以下简称NR)是一个react的子集.然而react生态圈异常庞大.作者也是今年才开始学习这门技术的.如果想运用到正式开发中.还需要自己学习更多,去探索.

  • 本篇同步Github仓库:https://github.com/BolexLiu/MyNote (欢迎star)


感谢&打赏

  • 如果本文对您的工作或学习有帮助,您可以打赏支持我.这样我会更有动力.都说2017年是为内容付费的元年.O(∩_∩)O哈哈~


    快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第6张图片

支付宝

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第7张图片

微信

快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇]_第8张图片

你可能感兴趣的:(快抱紧我,教你撸出一个简单的React-Naitive [入门基础篇])