1. JSX
描述
JSX 是一个 JavaScript 的语法扩展,长得很像 HTML。它被用来描述 UI 的结构,React 元素使用 JSX 来创建。
详细解释
JSX 看起来像模板语言,但它充分利用了 JavaScript 的能力。每个 JSX 元素都被编译成 React.createElement 调用,可以在浏览器中高效运行。
示例
const element = <h1>Hello, world!</h1>;这个 JSX 代码会被编译成:
const element = React.createElement('h1', null, 'Hello, world!');2. 组件
描述
组件是 React 应用的基础。组件可以是类组件或函数组件,每个组件都可以接受输入(即 props),并返回要显示的 React 元素。
详细解释
组件让你可以将 UI 拆分为独立、可复用的代码片段,并对每个片段进行隔离管理。函数组件是用 JavaScript 函数定义的,类组件是用 ES6 类定义的。
示例
函数组件:
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}类组件:
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}3. Props
描述
Props 是组件的输入参数,类似于函数的参数。它们是通过组件实例的属性传递给组件的。
详细解释
Props 是只读的。无论是函数组件还是类组件,组件都不应该修改自己的 props。组件可以根据 props 的不同来渲染不同的内容。
示例
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;在这个例子中,Welcome 组件使用了传递给它的 name prop。
4. State
描述
State 是组件的本地状态,组件通过 this.state 初始化,并通过 this.setState 更新。
详细解释
与 props 不同,state 是私有的,并且完全由组件自身管理。State 通常用于需要在用户交互时发生变化的数据。
示例
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = { date: new Date() };
  }
  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }
  componentWillUnmount() {
    clearInterval(this.timerID);
  }
  tick() {
    this.setState({
      date: new Date()
    });
  }
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}在这个例子中,Clock 组件维护自己的 state,state 随时间变化。
5. 事件处理
描述
React 元素上的事件处理非常类似于 DOM 元素上的事件处理,使用 CamelCase 语法来命名事件。
详细解释
在 React 中,你可以直接在 JSX 中使用事件处理函数。事件处理函数一般是通过箭头函数或 bind 方法绑定的。
示例
class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = { isToggleOn: true };
    // 这个绑定是必要的,使 `this` 在回调中起作用
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick() {
    this.setState(state => ({
      isToggleOn: !state.isToggleOn
    }));
  }
  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}6. 条件渲染
描述
在 React 中,可以根据条件来决定是否渲染某些内容。
详细解释
你可以使用 JavaScript 的条件运算符,比如 if 或三元运算符来实现条件渲染。
示例
function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    return <h1>Welcome back!</h1>;
  }
  return <h1>Please sign up.</h1>;
}7. 列表和键
描述
当你需要渲染一个列表时,你可以使用 JavaScript 的 map() 方法。
详细解释
在渲染列表时,React 需要一个唯一的 key 来标识每个列表项,以便高效地更新和重排列表。
示例
function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    <li key={number.toString()}>
      {number}
    </li>
  );
  return (
    <ul>{listItems}</ul>
  );
}在这个例子中,每个 li 元素都有一个 key 属性,它的值是列表项的唯一标识。
8. 表单
描述
在 React 中,表单元素(如 <input>, <textarea> 和 <select>)的处理方式稍有不同。
详细解释
React 表单元素的值通过组件的 state 来管理,表单元素的 value 属性与组件的 state 绑定,并在表单元素的 onChange 事件处理函数中更新 state。
示例
class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = { value: '' };
    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleChange(event) {
    this.setState({ value: event.target.value });
  }
  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value);
    event.preventDefault();
  }
  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}9. 提取组件
描述
将 UI 拆分成独立、可复用的组件,使每个组件只关注一件事情。
详细解释
提取组件可以使代码更容易维护和复用。根据应用逻辑和 UI 的重复使用情况来提取组件。
示例
function Comment(props) {
  return (
    <div className="Comment">
      <UserInfo user={props.author} />
      <div className="Comment-text">
        {props.text}
      </div>
      <div className="Comment-date">
        {formatDate(props.date)}
      </div>
    </div>
  );
}
function UserInfo(props) {
  return (
    <div className="UserInfo">
      <Avatar user={props.user} />
      <div className="UserInfo-name">
        {props.user.name}
      </div>
    </div>
  );
}
function Avatar(props) {
  return (
    <img className="Avatar"
      src={props.user.avatarUrl}
      alt={props.user.name} />
  );
}10. 组合 vs 继承
描述
React 有强大的组合模型,通过 props 和 children 属性进行组件组合。
详细解释
组合是一种更灵活的代码重用方式。React 官方建议使用组合而不是继承来构建组件。
示例
function FancyBorder(props) {
  return (
    <div className={'FancyBorder FancyBorder-' + props.color}>
      {props.children}
    </div>
  );
}
function WelcomeDialog() {
  return (
    <FancyBorder color="blue">
      <h1 className="Dialog-title">
        Welcome
      </h1>
      <p className="Dialog-message">
        Thank you for visiting our spacecraft!
      </p>
    </FancyBorder>
  );
}*** 本文仅是学习中的记录,有错误请指正。 ***





暂无评论内容