taro-hooks icon indicating copy to clipboard operation
taro-hooks copied to clipboard

为什么useEnv中的setEnv要在useEffect中触发?

Open peterczg opened this issue 1 year ago • 6 comments

Question

理论上来说TARO_ENV 在运行的时候就已经确定了环境,但是看useEnv源码的setter却是在useEffect中触发,是否有什么特殊的case要处理,需要这么做?

如果确定是不可变的,那么用useRef来存性能会更好,一些情况下可以少触发一次render。

function useEnv(): ENV {
  return useRef(getEnv()).current
}

peterczg avatar Jul 21 '22 07:07 peterczg

确实是的。下个版本的这种固定信息类的接口会直接产出。可以等待一下下个版本。

innocces avatar Jul 21 '22 07:07 innocces

那改的东西不少,我看很多hooks里面都依赖了useEnv

peterczg avatar Jul 21 '22 07:07 peterczg

因为之前跨端都是用env来判断的. 下个版本会走file的模式. xxx.${env}.ts. 这样会减少大部分的env使用

innocces avatar Jul 21 '22 08:07 innocces

这里要注意⚠️一个问题,就是支持扩展的编译平台,Taro已经支持的几种平台可以走xxx.${env}.ts条件编译,但是第三方自己fork的编译平台,建议留个xxx.ts作为兜底,还是拿getEnv()的值。举个不恰当的例子,比如说鸿蒙,Taro还没发布正式版,就可以走兜底的逻辑,让用户可以正常使用,不至于报错。

peterczg avatar Jul 21 '22 08:07 peterczg

=。- 只要是不带平台后缀的最后都会兜底会xx.ts. 不过这次更新要限制taro.version >= 330

innocces avatar Jul 21 '22 08:07 innocces

新版本已经发布. 暂未宣发. 可以开始尝鲜了 传送门

innocces avatar Sep 02 '22 10:09 innocces