使用中感到难受疑惑的点
实例中的computed及watch由于签名为字符串数组,是否可以支持props呢,在使用setup中又想监听某些props的变化,而这个限制貌似只有将监听通过内置hook写在组件内部,给人一种很不优雅的感觉。本质上都是监听,却又要通过组件内部来触发settings更新state达到效果。 虽然对于模块的状态在实例中监听可能会多次触发,但某些情况下的衍生数据对于写入模块显得有些小题大做。 理想状态: computed监听state、props、refComputed、moduleState、moduleComputed watch监听state、props、refComputed、moduleState、moduleComputed
收到建议,这块会重新考虑下更优雅的方式
那就等待魂大的好消息了
那就等待魂大的好消息了
其实有个api effectProps 满足观察props变化的需求,忘了在文档里写了,已经补上了,你可以看下
https://concentjs.github.io/concent-doc/api/ref-effect-props
那个等待魂大的好消息了
effectProps最近有api满足观察道具变化的需求,互联网文档里写了,已经补上了,你可以看下https://concentjs.github.io/concent-doc/api/ref-effect-props
可以,很nice。其实有一点不明白为什么依赖值必须是字符串,而不是和useEffect一样的引用设计
因为,useEffect 可以在函数组件每次一次渲染时都能被触发执行,只需要将相关依赖的最新值交给react即可,react内部会去和上一次记录的值做比较然后决定要不要执行effect cb,而 setup 函数里的所有逻辑只能执行一次,ctx.effectProps 方法的第二位参数负责传递字符串,然后 concent 内部通过字符串去取上一次props和最新props的值一一做比较然后决定要不要执行,如果像 useEffect那样传值的话是没有意义的啦(重点需要理解setup 函数里的所有逻辑只能执行一次这句话哈),不过下一个版本可以升级下 ctx.effectProps 函数,支持写
ctx.effectProps( effectCb, isPropsEqualCb ) 这样的方式,既可以让用户自己定制比较规则了,举例:
ctx.effectProps(()=>{
console.log(' triggerd! ');
}, ( prevProps, currProps )=>{
return prevProps.someKey !== currProps.someKey
})
因为,useEffect 可以在函数组件每次一次渲染时都能被触发执行,只需要将相关依赖的最新值交给react即可,react内部会去和上一次记录的值做比较然后决定要不要执行effect cb,而 setup 函数里的所有逻辑只能执行一次,ctx.effectProps 方法的第二位参数负责传递字符串,然后 concent 内部通过字符串去取上一次props和最新props的值一一做比较然后决定要不要执行,如果像 useEffect那样传值的话是没有意义的啦(重点需要理解setup 函数里的所有逻辑只能执行一次这句话哈),不过下一个版本可以升级下 ctx.effectProps 函数,支持写
ctx.effectProps( effectCb, isPropsEqualCb ) 这样的方式,既可以让用户自己定制比较规则了,举例:
ctx.effectProps(()=>{ console.log(' triggerd! '); }, ( prevProps, currProps )=>{ return prevProps.someKey !== currProps.someKey })
这个方式算是普天同庆了。最具个性化的方式了。最初也猜想是为了不重复触发。只是觉得多个不同类的状态不方便聚合effect。例如一个effect的depkeys由state和props共同触发。有没有一种写法可以支持这样方式呢!如同sync的path将depkeys的值path化!!
这个issue先关闭了,后续有时间实现这个特性,可以关注helux,一个更先进的react 状态管理实现