首页 > 其他分享 >React中的命令式 行为是指的哪些

React中的命令式 行为是指的哪些

时间:2024-02-05 19:44:43浏览次数:29  
标签:count 直接 DOM 哪些 React 命令式 useEffect

在React中,命令式行为通常指的是那些直接操作DOM或修改数据源而不通过React的声明式机制(如setState、useState Hook等)的操作。React的核心理念是声明式编程,它鼓励开发者描述UI应该是什么样子,而不是如何改变它。

命令式行为示例包括:

  1. 直接操作DOM

    • 使用原生JavaScript方法如element.innerHTML = 'new content'来更改DOM内容。
    • 直接添加、删除或修改DOM节点。
  2. 非React管理的状态变更

    • 在组件外部直接修改props或state的值,而没有触发React的生命周期钩子或状态更新函数。
  3. 非响应式的API调用

    • 直接发起网络请求并在请求完成时手动更新组件状态,而非使用useEffect Hook或者基于React的数据流进行处理。
  4. 事件处理器中的副作用

    • 在事件处理器内执行异步操作并直接更新状态,而不是将这些副作用封装到useEffect或其他适当的Hook中。

例如,在React中,以下代码片段体现了命令式行为:

class MyComponent extends React.Component {
  handleClick() {
    // 命令式:直接修改DOM
    this.ref.textContent = 'Clicked!';

    // 命令式:直接修改状态,没有触发React的setState
    this.state.count++;
  }

  render() {
    return (
      <div ref={(ref) => (this.ref = ref)}>
        <button onClick={this.handleClick}>Click me</button>
      </div>
    );
  }
}

相比之下,React推荐的做法是使用声明式的方式:

import React, { useState, useEffect } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0);
  
  // 声明式:使用setState更新状态
  function handleClick() {
    setCount(count + 1);
  }

  // 声明式:使用useEffect处理副作用
  useEffect(() => {
    console.log('Count changed to:', count);
  }, [count]); // 当count变化时运行effect

  return (
    <div>
      <button onClick={handleClick}>Click me</button>
      {/* React会自动根据count更新DOM */}
      <p>You clicked the button {count} times.</p>
    </div>
  );
}

标签:count,直接,DOM,哪些,React,命令式,useEffect
From: https://www.cnblogs.com/longmo666/p/18008717

相关文章

  • 命令式句柄(imperative handle)是什么意思?
    命令式句柄(imperativehandle)是什么意思?在计算机科学中,特别是在图形用户界面(GUI)和某些编程语言的上下文中,“命令式句柄”通常指的是对某个对象或资源的一种间接引用。它是一个特殊的标识符,用于操作对象而不直接访问对象本身。例如,在WindowsAPI编程中,句柄(Handle)是一种轻量级的......
  • react antd table如何清空选中行
    在ReactAntdTable组件中,可以通过设置 selectedRowKeys 属性来控制已经被选中的行。要清空所有选中的行,只需将该属性值设为空数组即可。示例代码如下:import{useState}from'react';import{Table}from'antd';constMyTable=()=>{const[selectedRows,......
  • 使用react-dnd实现表格之间互相拖拽
    /**引用immutability-helper轮子中的update;意为:在不改变原始来源的情况下改变数据副本*/1importReact,{Component}from'react';2import{DndProvider,useDrag,useDrop}from'react-dnd';3importHTML5Backendfrom'react-dnd-html5-backend......
  • 你不应该从一个 Model 组件暴露出 {open, close} 这样的命令式句柄,最好是像 这样,将 i
    你不应该从一个Model组件暴露出{open,close}这样的命令式句柄,最好是像这样,将isOpen作为一个prop。为什么这样要求?在React和现代UI开发中,遵循声明式编程范式通常被认为是一种最佳实践。暴露命令式的句柄(如open和close方法)会导致组件之间产生更紧耦合的关系,并且破坏了数......
  • 你知道哪些JavaScript语句?
    我们在上一节课中已经讲过了JavaScript语法的顶层设计,接下来我们进入到更具体的内容。JavaScript遵循了一般编程语言的“语句-表达式”结构,多数编程语言都是这样设计的。我们在上节课讲的脚本,或者模块都是由语句列表构成的,这一节课,我们就来一起了解一下语句。在JavaScript标......
  • 你知道哪些JavaScript语句?
    我们在上一节课中已经讲过了JavaScript语法的顶层设计,接下来我们进入到更具体的内容。JavaScript遵循了一般编程语言的“语句-表达式”结构,多数编程语言都是这样设计的。我们在上节课讲的脚本,或者模块都是由语句列表构成的,这一节课,我们就来一起了解一下语句。在JavaScript......
  • 在K8S中,常见部署K8S方式有哪些?
    在Kubernetes(K8s)中部署集群的方式多种多样,根据环境和需求的不同,常见的部署方式包括:手动部署从零开始手动配置每个节点上的所有组件。这包括安装Docker或容器运行时、设置网络插件、安装etcd集群、配置kube-apiserver、kube-controller-manager、kube-scheduler等控制面组件,并......
  • 问题:决定价格的主要因素有哪些?
    问题:决定价格的主要因素有哪些?参考答案如图所示......
  • 提前祝大家新年好!来看看社区 2023 都得了哪些奖吧~
    大噶好!转眼马上就是“龙”历新年啦,不知道大家这周的工作热情怎么样呢?小陈的心已经在殷切期盼回家过年了~ RTE开发者社区预祝诸位: 2024年......
  • [office] Excel绝对值的计算有哪些方法
    怎么使用Excel计算绝对值,相信有很多朋友不知道怎么做,其实在Excel中插入ABS函数就可以解决问题。以下是小编为您带来的关于Excel绝对值的计算,希望对您有所帮助。Excel绝对值的计算1、在表格中输入任意数值,如上图所示。然后选中“D3”单元格。2、单击“公式”选项卡,......