state和props

  • props是组件对外的接口,state是组件随内的接口
  • props用于组件间的数据传递,而state用于组件内部的数据传递
    state
    state是私有的,直接修改不会触发render函数,页面不会渲染
    //错误
    This.state.isOpen = true
    正确的修改方法是使用setState()
    onClick={() => {
    This.setState({ isOpen: !this.state.isOpen});
    }}
    构建函数constructor是唯一可以初始化state的地方,一旦离开初始化,setState()是修改state的唯一方法。
    注意该方法是异步操作,不要依赖当前的state去计算下个state
    setState的异步开发
    异步更新,同步执行:
  <button onClick={() => {
          this.setState({ count: this.state.count + 1 });
          console.log(this.state.count)
        }}>click</button>

效果:
image

解决办法:
使用回调方法,第二个参数位置

 <button onClick={() => {
          this.setState({ count: this.state.count + 1 }, () => {
            console.log(this.state.count)
          })
        }}>click</button>

Props
本质上,props就是传入函数的参数,是传入组件内部的数据。更准确的说,是从父组件传向子组件的数据。
使用方法示例:
数据以组件属性的形式传递给子组件

	 <Robot id={r.id} email={r.email} name={r.name} />

子组件:

import React from "react";
import styles from "./robot.module.css"
interface RobotProps {
 id: number;
  name: string;
  email: string;
}
// 定义Robot为函数组件,<RobotProps>泛型类型,可写为{props},propt用来传递数据,此处使用解构赋值直接展开数据{ id, name, email }
const Robot: React.FC<RobotProps> = ({ id, name, email }) => {
  return (
    <div className={styles.cardContainer}>
      <img alt="robot" src={`https://robohash.org/${id}`} />
      <h2>{name}</h2>
      <p>{email}</p>
    </div>
  );
};
export default Robot;

所有的Props都是只读的(immutable)
对象一旦创建就不可改变,只能通过销毁、重建来改变数据;通过判断内存地址是否一致,来确认对象是否经过修改。

posted @ 2022-02-21 15:27  黑蛋的博客  阅读(135)  评论(0编辑  收藏  举报