React高级特性
创始人
2024-11-14 17:08:03

函数组件

import React from 'react'; // class组件 class ListClass extends React.Component {         constructor(props) {             super(props);     }      render() {             const {     list } = this.props;         return (             
    { list.map(item =>
  • item.id}>{ item.name}
  • )}
) } } // 函数组件 const ListFunc = (props) => { const { list } = props; return (
    { list.map(item =>
  • item.id}>{ item.name}
  • )}
) } export { ListClass, ListFunc }

函数组件

  • 纯函数,输入props,输出JSX
  • 没有实例,没有生命周期,没有state
  • 不能扩展其他方法

非受控组件

  • ref
  • defaultValue defaultChecked
  • 手动操作DOM元素
import React from 'react'; // class组件 class Test extends React.Component {         constructor(props) {             super(props);         this.fileInputRef = React.createRef();         this.nameInputRef = React.createRef();     }      render() {             return 
this.fileInputRef}/>
} alertFile = () => { const elem = this.fileInputRef.current; alert(elem.value); // 不是this.fileInputRef.value } alertName = () => { const elem = this.nameInputRef.current; alert(elem.value); // 不是this.nameInputRef.value } } export default Test;

非受控组件-使用场景

  • 必须手动操作DOM元素,setState实现不了
  • 文件上传
  • 某些富文本编辑器,需要传入DOM元素

如何选择

  • 优先使用受控组件,符合React设计原则
  • 必须操作DO,再使用受控组件

Portals

  • 组件默认会按照既定层次嵌套渲染
  • 如何让组件渲染到父组件以外?
import React from 'react' import ReactDOM from 'react-dom' import './style.css'  class App extends React.Component {         constructor(props) {             super(props)         this

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...