React学习笔记

React学习笔记

React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript 库。作为前端三大框架之一不会的小伙伴是时候学一学啦。
这里萌芽只大概做个总结,新手小白的话可以去看看菜鸟教程,想深入了解的话可以去看官方文档,废话不多说,上干货!
菜鸟教程:https://www.runoob.com/react/react-tutorial.html
官方文档:https://react.docschina.org/docs/getting-started.html

React生命周期

  • componentWillMount 在渲染前调用,在客户端也在服务端。
  • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。
  • componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
  • shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。

可以在你确认不需要更新组件时使用。

  • componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
  • componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。
  • componentWillUnmount在组件从 DOM 中移除之前立刻被调用。

React组件

react组件有两种写法,一种是函数定义,另一种是class继承React.Component定义。组件名首字母必须大写并且组件内部的jsx模板必须有一个顶层外部标签,否则会报错。(这一点和vue组件一样.

  • props:外部传递进来的参数(类组件应始终使用 props 调用基础构造函数
  • state:内部私有参数(React 中只需更新组件的 state就会重新渲染用户界面

React.Component

在 React.Component 的子类中有个必须定义的 render() 函数。当 render 被调用时,它会检查 this.props 和 this.state 的变化并返回以下类型之一:

  • React 元素(通过 JSX 创建<div>生成DOM节点,<Hello/>渲染为组件
  • 数组或 fragments(使得 render 方法可以返回多个元素
  • Portals(可以渲染子节点到不同的 DOM 子树中
  • 字符串或数值类型(它们在 DOM 中会被渲染为文本节点
  • 布尔类型或 null什么都不渲染

如需与浏览器进行交互,请在 componentDidMount() 或其他生命周期方法中执行你的操作。保持 render() 为纯函数,可以使组件更容易思考。

组件的生命周期

挂载

当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下:

更新

当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:

卸载

当组件从 DOM 中移除时会调用如下方法:

错误处理

当渲染过程,生命周期,或子组件的构造函数中抛出错误时,会调用如下方法:

组件还提供了一些额外的 API:

class属性

实例属性

事件处理

 

class Toggle extends React.Component {
    constructor(props) {
        super(props);
        this.state = {isToggleOn: true};
   
    //这里绑定是必要的,这样 `this` 才能在回调函数中使用
    this.handleClick = this.handleClick.bind(this);
    
    个人理解:将this绑定在handleClick,因为handleClick调用的this.setState是
    来自Toggle里面的方法。我们要知道this是谁调用指向谁所以这里必须用bind绑一下this
    
    }


    handleClick(id,e) {
        //取消事件的默认动作。
        e.preventDefault();

        //更改State的参数并重新渲染组件
        this.setState(prevState => ({
            isToggleOn: !prevState.isToggleOn
        }));
    }

    render() {
        return (
            <button onClick={this.handleClick.bind(this, this.state.isToggleOn)}>
                {this.state.isToggleOn ? 'ON' : 'OFF'}
            </button>
        );    
    }
}

//渲染到页面
ReactDOM.render(
    <Toggle />,
    document.getElementById('example')
);

向事件处理程序传参 [暂时保留,之后有时间深入学习一下]

<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>

琐碎知识点

React 当中的元素事实上是普通的对象,React DOM 可以确保 浏览器 DOM 的数据内容与 React 元素保持一致。
React 只会更新必要的部分, React DOM 首先会比较元素内容先后的不同,而在渲染过程中只会更新改变了的部分。
state更新可能是异步的,React 为了优化性能,有可能会将多个 setState() 调用合并为一次更新。
在 React 中你不能使用返回 false 的方式阻止默认行为, 你必须明确的使用 preventDefault。

博客推荐:
关于this.setState()的那些事

 

2020年08月30日更新

视频笔记

 

如何实时获取setState【异步转同步】

promise + async + await方式异步转同步

页面渲染

条件渲染

  1. 判断 ? 内容 : 内容 【 三元运算   
  2. 判断 && 内容        【如果前面的判断为true则渲染后面的内容

列表渲染

使用map遍历渲染(key:必须有,节省渲染资源,当内容改变了有key地方不会重绘)

表单

表单受控组件(推荐使用。缺点:如果有很多input需要每个都绑定)

获取DOM的方法:Ref

非受控组件(解决了受控组件的问题,input很多的时候使用)

 

 状态提升

组件之间的数据交互【自己看文档】

组合/插槽

 

PropTypes类型检查

  1. 类型验证
  2. 必选项验证
  3. 默认值验证

 

【 萌芽觉得规范的话还是推荐用typescript。

UI组件库

Antd

 

使用Fetch

解决跨域问题

  • 第一种

 在你的package配置文件中大括号内部,最底部设置你跨域的地址重新启动项目就可以了。(记得把请求里面的http路径头删掉

  • 第二种(手动配置)

 

完美解决

 这种方式是开发中是用的比较多的方式。

 React-Router路由

根据页面路径的不同显示不同的组件,vue也一样都是采用单页模式切换。

  • HashRouter:采用的是锚点链接     #
  • BrowserRouter:采用的是h5新特性   /    history.push  (上线后需要后台配合做一些处理:重定处理404bug)

exact :精准匹配
strict:严格模式(必须和exact一起)
<Switch>:表示页面只加载一次

 

 

 

 

 

 

react Hook

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值