react16.3 学习总结

7 篇文章 0 订阅

react16.3 学习总结

一.react 组件传值

1.react 中组件传值都是通过属性传递的 方法也是 。
2.父组件通过属性传给子组件,子组件通过this.props接收。
eg:

import React, { Component } from 'react';
import TodoItem from './todoItem';
// 父组件
export default class todoList extends Component {
  constructor(props) {
    super(props);
    this.state = {
      value: '',
      list: []
    }
  }
  handleChange = (e) => {
    this.setState({
      value: e.target.value
    })
  }
  handleBtnClick = () => {
    this.setState({
      list: [...this.state.list,this.state.value],
      value: ''
    })
  }
  handleItemDelete = (index) => {
    const list = [...this.state.list];
    list.splice(index,1);
    this.setState({
      list: list
    })
  }
  render() {
    return (
      <div>
        <input type="text" value={this.state.value} onChange={this.handleChange}/>
        <button onClick={this.handleBtnClick}>提交</button>
        <ul>
          {
            this.state.list.map((item,index) => (
              <div>
                <TodoItem
                  // 属性传递值
                  content={item}
                  index={index} 
                  /// 属性传递方法
                  ItemDelete = {this.handleItemDelete}  
                  />
              </div>
            ))
          }
        </ul>
      </div>
    )
  }
}

2.子组件

import React, { Component } from 'react'

// 子组件
export default class todoItem extends Component {
  handleClick = () => {
    // prop接受属性和方法
    this.props.ItemDelete(this.props.index);
  }
  render() {
    return (
      <div onClick={this.handleClick}>
          {this.props.content}
      </div>
    )
  }
}


二.react 生命周期

1.react 生命周期

不同阶段生命周期函数执行顺序

  • 挂载(Mounting)
  • 更新(Updating)
  • 卸载

2.各个阶段生命周期执行顺序(黄色标记为常用生命周期)

挂载(Mounting)

挂载是指组件被实例化并且被插入dom中
constructor --> getDerivedStateFromProps – > render --> compomentDidMount

更新(Updating)

当state 或 props 变化时触发
顺序如下:
getDerivedStateFromProps --> shouldComponentUpdate --> render --> getSnapshotBeforeUpdate --> componentDidUpdate

卸载(Unmount)

卸载是指组件被移除
componentWillUnmount

总结为下图

在这里插入图片描述
生命周期查看地址: react16.3 and react16.4 详细生命周期图例

常用生命周期函数使用介绍

constructor()
  • 初始化内部的state
  • 为事件处理函数绑定实例
render()
  • 组件的props 或者state的值有变化 触发
componentDidMount()
  • 发送数据请求
  • 操作dom
componentDidUpdate(prevProps,prevState)
  • 组件更新后被调用,可更新Dom,prevProps,prevState 分别指组件更新前的props 和 state
componentWillUnmount()
  • 组件销毁释放资源
  • 清除定时器,清楚事件监听等(removeEventListener)

三. 组件状态

1.函数组件(无状态组件) vs 类组件

  • 函数组件优势:只是一个函数所以性能自然要比类组件强很多

四.redux的使用

1.Redux更新state的逻辑:action -> reducer -> new state
action -> dispatch(action) -> store -> reducer(是一个函数)  -> new State -> store

在这里插入图片描述

  • store : 数据中心统一存储(唯一的)只有store能改变自己的内容。
  • action:用于描述更新数据的“行为”。
  • actionCreator: 创建action对象的一个方法,调用这个方法就能返回一个action对象,用于简化代码。
  • reducer:接收action并更新Store,reducer 可以接收state, 但是不能修改state(,reducer必须是纯函数
  • 纯函数: 固定输入,固定输出
获取数据流程
  • createStore 创建store。

  • store.getState() 获取store中的数据。

  • store.dispatch(action): 派发action 更新store的数据。

  • store.subscribe(): 订阅store中的数据。(subscribe 参数是一个函数)

    react 要改变store数据 要派发action action 通过dispatch方法传递给store store会把之前的数据和action 转发给reducer reducer是一个函数 reducer接受到了state和action之后 做一些处理后返回给store store会替换之前的数据, store 数据发生改变后 组件会感知到组件发生改变, 这个时候它从store 中重新取数据更新组件的内容,随之页面跟着发生变化了。

    五.redux-thunk中间件

    1.把异步代码放到了acton中操作。
    2.redux-thunk :对store.dispatch()的升级让他可以接受一个函数。
    3.redux-thunk 指的是redux的中间件。

// app.js 
componentDidMount() {
    const action = getTodoList(); // 是一个函数
    store.dispatch(action);
  }
// actionCreators.js
import { INIT_LIST_ACTION, GET_INIT_LIST } from './actionTypes';
import axios from 'axios';
export const initListAction = (data) => ({
  type: INIT_LIST_ACTION,
  data
});
export const getTodoList = () => {
  return (dispatch) => {
    // redux-thunk  让 action 是一个函数
    axios.get('https://tapi.lifeat.cn:45788/city/provinces').then(res => {
      const data = res.data.data;
      const action = initListAction(data); // 这个时候action是一个对象了 再派发给sotre
      dispatch(action);
    })
  }

}

六.redux-saga中间件

七.react-redux的使用

1.provider 高阶组件
import React from 'react';
import ReactDOM from 'react-dom';
import store from './store';
import './index.css';
import App from './App'
import { Provider } from 'react-redux';

//  provider 把store 提供给组件
const Apps = (
  <Provider store={store}>
    <App />
  </Provider>
)
ReactDOM.render(Apps, document.getElementById('root'));

2.connect 高阶组件

import React from 'react';
import { connect } from 'react-redux';

class App extends React.Component {
  handleChange(e) {
    console.log(e.target.value);
  }
  handleClick = () => {

  }
  render() {
    return (
      <div className="App">
        <input type="text" onChange={e => this.props.changeInputValue(e)} value={this.props.input}/><button onClick={this.handleClick}>提交</button>
      </div>
    );
  }
}
//mapStateToProps 把store的state数据映射props , mapDispatchToProps 把dispatch映射给props 
// state的数据映射给props
const mapStateToProps = (state) => {
  console.log(state)
  return {
    input: state.input
  }
}
// store.dispatch  映射到props 上 
const mapDispatchToProps = (dispatch) => {
  return {
    changeInputValue(e) {
      dispatch({type: 'change_input_value',value: e.target.value})
    }
  }
}
export default connect(mapStateToProps,mapDispatchToProps)(App);

欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值