React 官网核心概念

核心概念

2. JSX

JS 扩展

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

视图与逻辑之间的结合


Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用

以下两种示例代码完全等效:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

// 预先执行一些检查,以帮助你编写无错代码
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

// 实际上它创建了一个这样的对象
// 注意:这是简化过的结构
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
};

这些对象被称为 “React 元素”

它们描述了你希望在屏幕上看到的内容 React 通过读取这些对象,然后使用它们来构建 DOM 以及保持随时更新

3. 元素渲染进根节点

元素:构成 React 应用的最小砖块 ,描述了你在屏幕上想看到的内容

将一个元素渲染为 DOM

假设你的 HTML 文件某处有一个 <div>

<div id="root"></div>

想要将一个 React 元素渲染到根 DOM 节点中,只需把它们一起传入 ReactDOM.render()

const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));

4. 组件 & Props

组件,类似函数, 接受 “props” = > React 元素 (展页面示内容)

定义组件

1️⃣ 编写 JavaScript 函数

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

2️⃣ 使用 ES6 的 class 来定义组件

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

组件名称必须以大写字母开头

不能更改props

不能修改自身的 props。来看下这个 sum 函数:

function sum(a, b) {
   
	// 纯函数:不会尝试更改入参
  return a + b;
}
function withdraw(account, amount) {
   
	// 不是纯函数:更改了自己的入参
  account.total -= amount;
}

所有 React 组件都必须像纯函数一样保护它们的 props 不被更改。

5. State & 生命周期

state : 私有的,完全受控于当前组件。 是组件自动更新

将函数组件转换成 class 组件

缺点:需要将 ReactDOM.render 放进一个函数,然后使用 setInterval 调用,并且 Clock需要传入参数

改进:直接调用 ReactDOM.render 并且 Clock 不要参数

方法:将函数组件变为 class 组件,state 类似与 props

function Clock(props) {
  return (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {props.date.toLocaleTimeString()}.</h2>
    </div>
  );
}

function tick() {
  ReactDOM.render(
    <Clock date={new Date()} />,
    document.getElementById('root')
  );
}

setInterval(tick, 1000);
  1. 创建一个同名的 ES6 class,并且继承于 React.Component。
  2. 添加一个空的 render() 方法。
  3. 将函数体移动到 render() 方法之中。
  4. render() 方法中使用 this.props 替换 props
// 1
class Clock extends React.Component {
  // 2
  render() {
    // 3
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.props.date.toLocaleTimeString()}.</h2>
      </div>
    );
    // 4 this.props		
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值