0
点赞
收藏
分享

微信扫一扫

React17学习

飞鸟不急 2022-01-21 阅读 49

命令

  • npx create-react-app my-app
  • npx create-react-app my-app --template typescript
  • npm start

jsx

React认为视图的本质就是渲染逻辑与UI视图表现的内在统一,React把HTML与渲染逻辑进行了耦合,形成了JSX。

JSX的特点

  • HTML代码可以与jsx兼容
  • 可以在jsx中镶如表达式
  • 使用jsx指定子元素
  • 小驼峰命名。class变成了className、tabindex变成tabIndex
  • jsx自定义属性,以 data- 开头

JSX 编译成对象

  • jsx会被编译成React.createElement() 对象
const element = (
    <h1 className="greeting">hello</h1>
);
const element = React.createElement(
    'h1',
    {className='greeting' },
    'hello'
);
// 这两种写法一样
// jsx 会被编译成React.createElement()对象
const element = { // 最后输出的对象
    type: 'h1',
    props: {
        className:'greeting',
        children:'hello'
    }
}

css in js

新建custom.d.ts 这种文件可以被ts直接识别。不被编译不备打包

// 声明 CSS 文件。讲过声明后才可以被TS识别
declare module "*.css" {
    const css: { [key: string]: string }
    export default css
}

import style from './index.css' <div className={style.app}></div>

npm install typescript-plugin-css-modules --save

加载媒体资源

新建assets文件夹。存储images、fonts、icons

class 组件

react组件必须继承React.Component ,这个组件接受一个泛型(Props,State,自定义数据)

class ShoppingCart extends React.Component<Props, State>{
   constructor(props: Props) { // 传递来的Props
   super(props); // 必须调用父类
   this.state = { // 初始化state
     isOpen: false,
    }
   }
   render() {
       return (
           // DOM 元素
       )
   }
}

行内样式

行内样式接受一个采用小驼峰命名属性的js对象,可以预防xss攻击

const divStyle = {
    color: 'blue'
}
// 在组件内使用时
return ( <div style={divStyle}></div> )

State和Props的区别

  • props是组件对外的接口,而state是组件对内部的接口
  • props用于组件间数据传递,而state用于组件内部的数据传递

用setState()修改State

this.setState({isOpen:false})

构建函数constructor是唯一可以初始化state的地方

constructor(props) {
    super(props)
    this.state = {
        count: 0
    }
}
  • 调用setState后,state不会立即改变,是异步操作
  • 不要依赖当前的state,计算下一个state
  • state处理一般发生在声明周期变化的时候。(生命周期不变,state就是开始那个值)
<button onClick = {
        this.setState((preState, preProps) => {
            return {count: this.preState.count++}
        }, ()=>{})
    }>
</button>

Props

props是只读属性

事件处理

handleClick = (e) => {
    e.tatget // 描述的是时间发生的元素
    e.currentTarger // 描述的是时间处理绑定的元素
}

react中的icon

npm install react-icons

<FcAddressBook />组件方式使用

React生命周期

  • Mounting:创建虚拟DOM,渲染UI

  • Updating:更新虚拟DOM,重新渲染UI

  • Unmounting:删除虚拟DOM,移除UI

  shouldComponentUpdate(nextProps, nextState) {
     return (nextState.some! = this.state.some);
  }
  componentDidUpdate() {}
  componentWillUnmount() {}
举报

相关推荐

0 条评论