React基础
来源:互联网 发布:淘宝卖家秀和买家秀 编辑:程序博客网 时间:2024/06/10 01:37
资料
在 2017 年学习 React + Redux 的一些建议
react官网翻译
react菜鸟教程
react router
一步一步实现一个React SPA应用教程(一个比较全的例子)
个人做的react网站,比较简单
jsx
指 react中的html模板写法
- 可以赋值给变量
- {}用来嵌套表达式
- jsx创建后不可变,只能重新渲染
注意项:
1. jsx是React.createElement(component,props,..children)方法的语法糖
2. jsx组件开头必须大写
3. 使用jsx需要引入react变量:
import React from ‘react’
4. jsx赋值给变量使用
(1) 变量作为标签使用(变量必须大写)
const SpecificStory = App; <SpecificStory story={ff} />;
(2) 变量作为输出
description = <strong>even</strong>;<div>{props.number} is an {description} number</div>
.
5. jsx属性
(1)未指定值时默认为true <MyTextBox autocomplete />
(2)…属性扩展,一次性全部传入
xxx={firstName: 'Ben', lastName: 'Hector'}//属性写成集合<Greeting {...xxx} />;//上述等同于:<Greeting firstName="Ben" lastName="Hector" />
.
6. {}表达式,结果是false、null、undefined 和 true 不会被渲染
自定义组件
1、定义 & 使用
函数定义使用方式
规则:形参接收porps,返回一个jsx
function App(props){ return <h1>{props.name}</h1>}const element=<App name='cc'>
ES6 类定义使用方式
class App extends React.Component{ render(){ return <h1>{this.props}</h1> }}const element=<App name='cc'>
2、props
不可修改,由自定义组件调用者传递来的属性集合
3、state (只适用于es6类)
类的固有属性,特点是,放在这个属性里的值改变时,重新渲染值所在的dom
- state是异步的,如果需要上次的状态值,这种情况使用函数调用,它会将状态作为参数传入
//prevState是当前运行到代码是的state值this.setState(function(prevState, props) { return { counter: prevState.counter + props.increment };});
- setState()方法参数:可以是{} 或 fn
4、生命周期
周期事件分成两类:挂载和更新
- componentDidMount
- componentWillUnmount
5、事件
必须驼峰写法,值应该是个方法
<button onClick={activateLasers}> Activate Lasers</button>
阻止事件的默认行为,调用preventDefault()
function handleClick(e) { e.preventDefault(); console.log('The link was clicked.');}
6、条件渲染
方式有如下几种:
1. 做出子组件,在子组件里根据条件返回不同的内容
2. 把组件放在变量里,render里用{}条件输出
3. && 在{}里可以和jsx一起用
true && expression 总是返回 expression ,false时react元素不会渲染
{unreadMessages.length > 0 && <h2> You have {unreadMessages.length} unread messages. </h2>}
.
4. 三目表达式也可
8、children组件
组件被调用时嵌套有子组件时,自组建通过props.children传递
上述算是默认情况,可以自己把子组件放在props里传递,而不是放在组件内作为子组件去传递。
9、特例:表单组件受控(可非受控)
input textarea select表单组件的内容更新由react控制(原来是自动更新)
控制方式:
value值是state决定,
更新由触发onchange等事件改变state,
从而类似原来的html表单组件更新,好处是,可自由控制触发条件和渲染结果。
1 . input、textarea、select
值由value控制,更新由onChange事件控制
<input type="text" value={this.state.value} onChange={this.handleChange} />//函数 handleChange(event) { this.setState({value: event.target.value});}
<textarea value={this.state.value} onChange={this.handleChange} />
<select value={this.state.value} onChange={this.handleChange}> <option value="grapefruit">Grapefruit</option> <option value="lime">Lime</option> <option value="coconut">Coconut</option> <option value="mango">Mango</option></select>
2 . check(应该算在input部分)
值由checked控制
注意:
(1)多个表单时,公用一个处理事件,给表单添加name属性,用来区别和设置
<input name="isGoing" type="checkbox" checked={this.state.isGoing} onChange={this.handleInputChange} /><input name="numberOfGuests" type="number" value={this.state.numberOfGuests} onChange={this.handleInputChange} />//事件handleInputChange(event) { const target = event.target; const value = target.type === 'checkbox' ? target.checked : target.value; const name = target.name; //name与value引用的state值相同 this.setState({ [name]: value});
(2) defaultValue指定默认值 <input ><select>
和 <textarea
>使用defaultValue
其中<input type="checkbox">
和 <input type="radio">
使用 defaultChecked
10、状态提升
当几个组件需要共用同一个状态数据时,由于各个组件state是独立的,此时需要状态提升,即把state提升到他们的父组件。
例子:
假设两个input组件a b,他们的显示值需要同步,更改其中一个时另一个也同步更改。
1. 怎么使用共用状态?
显然共同的状态应该放在父组件z,ab组件显示值应该是z的状态,通过props把z的状态传递到ab。
2. 一个组件改变状态时,另一个如何同步?
ab改变值时,必须调用z的方法,来改变z的状态,这样ab组件会同时刷新。z的方法也通过props传递到自组件。
总的来说:父组件用props传递方法和状态给2个自组件,子组件通过调用其方法改变父组件的方法。
ref
使用 refs 的情况:(尽量避免使用 refs)
1 .使用 refs 的情况:(尽量避免使用 refs
2 .触发强制动画
3 .集成第三方 DOM 库
用于DOM(一般只考虑此种情况)
1 添加ref
<input type="text" ref={(ele) => { this.textInput = ele; }} />
通过匿名函数把原生dom赋值到对象变量里。
2 使用
存储的是原生dom
this.textInput.focus();
11、ref
使用 refs 的情况:(尽量避免使用 refs)
1 .使用 refs 的情况:(尽量避免使用 refs
2 .触发强制动画
3 .集成第三方 DOM 库
用于DOM(一般只考虑此种情况)
1 添加ref
Greeting.propTypes = { name: PropTypes.string};
12、propType
出于性能原因,propTypes 只在开发模式下进行检查。
安装
导入
import PropTypes from 'prop-types';
使用
- React基础
- React基础
- react 基础
- react基础
- React基础
- React基础
- react基础
- react基础
- react和react jsx基础
- React.js基础
- React基础入门
- React基础语法学习
- React基础认识
- React 基础题
- React入门基础
- react - 基础入门
- react-native 基础入门
- React Native基础组件
- C++中TCP/IP按约定报文协议接收数据完成拼包
- 常用类
- xml自动提示
- 读取配置文件properties的简单方式
- Spring学习笔记(一)
- React基础
- 终结解决Java Web开发过程中的中文乱码问题
- leetcode题解 632. Smallest Range
- Java并发编程:volatile关键字解析
- Leetcode 72. Edit Distance
- Keepalived的安装和配置
- linux-centos-创建虚拟机
- Linux操作系统管理技术(二)
- nodejs调试命令