事件联动

如果 A 和 B 事件存在联动关系

  1. 可以在组件中先后发射 2 个事件
  2. 在 A 事件定义中触发 B

优先使用 2,减少重复代码和漏掉的可能

接口调用放在 view 层

mode 内处理数据操作逻辑,同步的
配合 umi-request,接口调用尽量放在 view 层使用

useUpdateEffect 可以在组件 mounted 后的更新阶段执行

不要在 useModel 里面 selector

遵循 MVC,model 和 model 之间少一些交互,交给 hooks(controller)

在状态定义的位置,去编写该状态的副作用,不要反其道而行之,特意 依赖一个没有使用到的外部状态,只是为了用其副作用

不用直接定义 衍生状态,而是通过其他状态进行设置

  1. import { StageComponentsModelItem } from '@/models/stageComponentsModel';
  2. import { useModel } from '@umijs/max';
  3. import { useEffect, useState } from 'react';
  4. const useSelectNodeMeta = () => {
  5. const [selectNodeMeta, setSelectNodeMeta] =
  6. useState<StageComponentsModelItem>();
  7. const [selectNodeId, setSelectNodeId] = useState<string>();
  8. const { stageComponentsModel } = useModel(
  9. 'stageComponentsModel',
  10. (model) => ({
  11. stageComponentsModel: model.stageComponentsModel,
  12. }),
  13. );
  14. useEffect(() => {
  15. if (selectNodeId) {
  16. setSelectNodeMeta(stageComponentsModel?.[selectNodeId]);
  17. } else {
  18. setSelectNodeMeta(undefined);
  19. }
  20. }, [selectNodeId]);
  21. return {
  22. selectNodeId,
  23. selectNodeMeta,
  24. setSelectNodeId,
  25. };
  26. };
  27. export default useSelectNodeMeta;