Yasin

Yasin

声明式api和命令式api的区别

1. 核心区别:What vs. How

  • 声明式 (Declarative): 告诉程序你想要什么 (What),而不去管具体怎么做。
    • 比喻:你去餐厅点菜,说“我要一份宫保鸡丁”。你只关心结果(菜上桌),不关心厨师是先切鸡丁还是先炒花生。
  • 命令式 (Imperative): 告诉程序具体怎么做 (How),通过一步步的指令达到目的。
    • 比喻:你走进厨房,对厨师说“先切鸡胸肉,切成丁,然后腌制,起锅烧油...”。你需要控制每一个步骤。

2. 代码对比:以 ECharts 为例

假设我们要把一个图表的标题从“旧标题”改成“新标题”。

命令式 (原生 ECharts, jQuery) 你需要手动找到那个对象,然后修改它。

// 1. 获取图表实例
const chart = echarts.getInstanceByDom(dom);
// 2. 获取当前的配置
const currentOption = chart.getOption();
// 3. 修改配置中的具体字段
currentOption.title[0].text = "新标题";
// 4. 命令图表更新
chart.setOption(currentOption);

特点:你必须知道 chart 实例在哪,必须知道调哪个方法 setOption 才能生效。

声明式 (React, ECharts-for-React) 你只需要描述最新的状态。

// 状态变了,视图自动就变了
const [title, setTitle] = useState("新标题");

const option = {
  title: { text: title }, // 只要这里 title 变了
};

// 你只管给它最新的 option,不用管它是怎么 setOption 的
<ReactECharts option={option} />;

特点:你只更新了数据(状态),UI 库负责去“计算”并“执行”更新。

3. 总结

特性 命令式 (Imperative) 声明式 (Declarative)
关注点 过程 (Process) 结果 (Result)
控制力 极强,可微操每一步 较弱,隐藏了底层细节
代码量 通常较多,容易啰嗦 通常较少,逻辑清晰
典型代表 C, Java, jQuery, 原生DOM操作 SQL, HTML, React, Vue, CSS