记录一次需求变动导致的重构

针对检索框功能调整,实现仅在用户点击或按下Enter键时触发检索,而非每次过滤条件更改都触发。通过重构状态管理和引入不同mutation及getter来区分用户输入、筛选和其他交互行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

今天接到测试通知,需要将之前的检索框改为:当用户切换过滤条件时不执行跳转检索页面,只有点击或者enter的时候才跳转检索页面。之前的设计是切换过滤条件会执行跳转。

正文:

这个小小的变动影响面蛮多的,因为我们的输入框state是写入store里的,过滤切换和点击都会执行mutation,这样我们在其他页面就可以watch到该mutation,从而发出请求。现在需要对过滤条件进行拆分:需要跳转时分发mutation替换整个节点树从而可以触发searchOption计算属性watch,并拿到信息的最新值,进行检索。而切换过滤条件时仅仅分发一个子属性mutation,分发后不会触发searchOption计算属性watch实质上也是变化了的,只是没有触发watch而已),这样就实现了状态的分离:enter输入、按钮检索时触发watch,过滤条件切换时不触发。

问题解决后让我们重新思考下状态的设计:

  1. 应该保持怎样的设计力度?以input检索框为例:我们有输入状态、enter状态、点击状态、勾选拼写提示的某条时的状态。等等,可能很多,我们应该思考我们可能会关注哪些状态?(根据状态的改变执行哪些不同的逻辑,如果执行逻辑相同那么可以假想同样的状态)
  2. 假设我们需要关注用户输入状态、用户enter状态、用户勾选状态、用户切换状态enter和勾选执行同样的逻辑合并状态,一共二个状态,可以多个mutation.分别为用户输入时执行查询、enter和勾选时执行跳转页面查询,切换时仅仅更新记录,这样我们就有两个getters。,我们称getters为状态,而state里的值为记录
  3. 然后我们就在页面里添加2个计算属性和watch.当状态改变时执行相应的逻辑。
export default {
  state: {
    input:{
      value:'',
      filter1:'',
      filter2:'',
    }
  },
  getters: {
    getInputData(state) {
      //用户enter、或者勾选时
      return state.input;
    },
    getInputValue(state){
      //用户输入时
      return state.input.value;
    }
  },
  mutations: {
    updateInputValue(state, data) {
      //更新用户的输入
      state.input = data;
    },
    updateInputFilter1(state,data){
      //更新过滤1的切换
      state.input.filter1 = data;
    },
    updateInputFilter2(state,data){
      //更新过滤2的切换
      state.input.filter1 = data;
    },
  }
}

//可能使用该store的.vue文件
computed:{
  inputData(){
    return this.$store.getters.getInputData
  },
  inputValue(){
    return this.$store.getters.getInputValue;
  }
},
watch:{
  inputData(newVal){
    //执行跳转
  },
  inputValue(newVal){
    //用户输入时执行
  }
}

总结:设计好状态很重要

在使用 `git merge` 的过程中,如果合并中途被打断或出现异常情况(比如手动终止了进程、程序崩溃等),确实可能导致某些提交信息未能正确保存或者部分更改未被追踪到最终结果里。下面详细介绍这种情况的原因以及恢复丢失提交的办法。 --- ### 原因解析 1. **Merge 中止** 在执行 `git merge` 操作期间,如果有任何问题导致过程停止(例如冲突未解决就退出命令行界面),此时 Git 可能不会自动继续完成剩下的任务,这会使得一些本应在此次 Merge 过程中包含的提交记录暂时无法反映出来。 2. **Reflog 缓存不足** 即便某次提交看起来似乎消失了,实际上它很可能只是还没从内存转移到磁盘存储而已;如果没有及时清理旧数据的话,这些隐藏起来的信息仍然能够通过特定工具找回来。 --- ### 解决办法 #### 步骤一:利用 Reflog 找回丢失的 Commit ID 每个用户的每一次操作都会留下足迹于 reflogs 文件夹下,即便是那些看似已经删除的操作也不例外。我们可以通过查询 reflog 来定位那两条消失不见的提交: ```bash git reflog ``` 找到对应的 commit hash(即每一条日志前边那个长长的字符串编号)。假设这里得到的是 abcdefg 和 hijklmn 分别代表我们要找回的第一和第二条丢失提交。 #### 步骤二:创建新分支指向丢失的 Commit 一旦确定了目标 commit id ,就可以基于此建立临时修复用的新分支: ```bash git branch temp-recover-branch abcdefg git checkout temp-recover-branch ``` 重复上述指令把另一条也加上去: ```bash git cherry-pick hijklmn ``` #### 步骤三:将补救后的改动重新引入主项目线内 最后一步便是把这些修正过的变更带回到原来的工作流当中啦!你可以选择将其合并回去或者直接替换掉现有内容——取决于实际需求和个人偏好设定。 ```bash # Option A - Merge back into original branch git checkout main-original-workflow git merge temp-recover-branch # OR Option B - Reset hard to the recovered state (caution needed!) git reset --hard temp-recover-branch ``` 完成后记得删掉辅助性质的过渡分支哦: ```bash git branch -d temp-recover-branch ``` --- ### 预防措施 为了避免类似事故再次发生,请养成良好实践习惯: 1. 开始大型重构或是复杂整合工作之前总是做好充分备份; 2. 使用更稳妥的方式如 stash 存储当前变动而非单纯依赖 stage area 管理细小调整; 3. 定期整理归档重要里程碑节点作为额外保障手段之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值