【React 基础】常用知识点【复盘】

JSX

JSX 是一个 JavaScript 语法扩展。它类似于模板语言,但它具有 JavaScript 的全部能力。JSX 最终会被编译为 React.createElement() 函数调用,返回称为 “React 元素” 的普通 JavaScript 对象。

React DOM 使用 camelCase(驼峰式命名)来定义属性的名称,而不使用 HTML 属性名称的命名约定。例如,HTML 的 tabindex 属性变成了 JSX 的 tabIndex。而 class 属性则变为 className,这是因为 class 是 JavaScript 中的保留字:

const name = 'Clementine';
ReactDOM.render(
  <h1 className="hello">My name is {name}!</h1>,
  document.getElementById('root')
);

详情请看下面三篇博客:

https://blog.csdn.net/weixin_43352901/article/details/107861492  // 深入JSX

https://blog.csdn.net/weixin_43352901/article/details/107779803  // jsx语法进阶使用

https://blog.csdn.net/weixin_43352901/article/details/107770932  // jsx的基础使用

元素

React 元素是构成 React 应用的基础砖块。元素描述了你在屏幕上想看到的内容。React 元素是不可变对象。

const element = <h1>Hello, world</h1>;

通常我们不会直接使用元素,而是从组件中返回元素。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107794490  // 元素渲染

组件

React 组件是可复用的小的代码片段,它们返回要在页面中渲染的 React 元素。React 组件的最简版本是,一个返回 React 元素的普通 JavaScript 函数:

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

组件也可以使用 ES6 的 class 编写:

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

组件可被拆分为不同的功能片段,这些片段可以在其他组件中使用。组件可以返回其他组件、数组、字符串和数字。组件名称应该始终以大写字母开头(<Wrapper/> 而不是 <wrapper/>)。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107794595  // 组件 & Props

props

props 是 React 组件的输入。它们是从父组件向下传递给子组件的数据。

记住,props 是只读的。不应以任何方式修改它们:

// 错误做法!
props.number = 42;

如果你想要修改某些值,以响应用户输入或网络响应,请使用 state 来作为替代。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107794595  // 组件 & Props

props.children

每个组件都可以获取到 props.children。它包含组件的开始标签和结束标签之间的内容。例如:

<Welcome>Hello world!</Welcome>

Welcome 组件中获取 props.children,就可以得到字符串 Hello world!

function Welcome(props) {
  return <p>{props.children}</p>;
}

对于 class 组件,请使用 this.props.children 来获取:

class Welcome extends React.Component {
  render() {
    return <p>{this.props.children}</p>;
  }
}

state

当组件中的一些数据在某些时刻发生变化时,这时就需要使用 state 来跟踪状态。例如,Checkbox 组件可能需要 isChecked 状态,而 NewsFeed 组件可能需要跟踪 fetchedPosts 状态。

stateprops 之间最重要的区别是:props 由父组件传入,而 state 由组件本身管理。组件不能修改 props,但它可以修改 state

对于所有变化数据中的每个特定部分,只应该由一个组件在其 state 中“持有”它。不要试图同步来自于两个不同组件的 state。相反,应当将其提升到最近的共同祖先组件中,并将这个 state 作为 props 传递到两个子组件。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107814311  // State & 生命周期

生命周期方法

生命周期方法,用于在组件不同阶段执行自定义功能。在组件被创建并插入到 DOM 时(即[挂载中阶段(mounting)),组件更新时,组件取消挂载或从 DOM 中删除时,都有可以使用的生命周期方法。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107906510

受控组件vs 非受控组件

React 有两种不同的方式来处理表单输入。

如果一个 input 表单元素的值是由 React 控制,就其称为受控组件。当用户将数据输入到受控组件时,会触发修改状态的事件处理器,这时由你的代码来决定此输入是否有效(如果有效就使用更新后的值重新渲染)。如果不重新渲染,则表单元素将保持不变。

一个非受控组件,就像是运行在 React 体系之外的表单元素。当用户将数据输入到表单字段(例如 input,dropdown 等)时,React 不需要做任何事情就可以映射更新后的信息。然而,这也意味着,你无法强制给这个表单字段设置一个特定值。

在大多数情况下,你应该使用受控组件。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107897072  // 非受控组件

key

“key” 是在创建元素数组时,需要用到的一个特殊字符串属性。key 帮助 React 识别出被修改、添加或删除的 item。应当给数组内的每个元素都设定 key,以使元素具有固定身份标识。

只需要保证,在同一个数组中的兄弟元素之间的 key 是唯一的。而不需要在整个应用程序甚至单个组件中保持唯一。

不要将 Math.random() 之类的值传递给 key。重要的是,在前后两次渲染之间的 key 要具有“固定身份标识”的特点,以便 React 可以在添加、删除或重新排序 item 时,前后对应起来。理想情况下,key 应该从数据中获取,对应着唯一且固定的标识符,例如 post.id

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107819386  // Key的作用

Ref

React 支持一个特殊的、可以附加到任何组件上的 ref 属性。此属性可以是一个由 React.createRef() 函数创建的对象、或者一个回调函数、或者一个字符串(遗留 API)。当 ref 属性是一个回调函数时,此函数会(根据元素的类型)接收底层 DOM 元素或 class 实例作为其参数。这能够让你直接访问 DOM 元素或组件实例。

谨慎使用 ref。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107893390  // Refs and the DOM

事件

使用 React 元素处理事件时,有一些语法上差异:

  • React 事件处理器使用 camelCase(驼峰式命名)而不使用小写命名。
  • 通过 JSX,你可以直接传入一个函数,而不是传入一个字符串,来作为事件处理器。

详情请看下面博客:

https://blog.csdn.net/weixin_43352901/article/details/107819264  // 事件处理

协调

当组件的 props 或 state 发生变化时,React 通过将最新返回的元素与原先渲染的元素进行比较,来决定是否有必要进行一次实际的 DOM 更新。当它们不相等时,React 才会更新 DOM。这个过程被称为“协调”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值