以安全的方式修改缓存的资源

作者: krispya创建于 2026年9月5日更新于 2026年9月5日

改变由“使用Memo”和“使用国”返回的价值观总是违反React的规则,但我们还是这样做了。

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? // 在此之前: 变异存储在反应状态中的对象 const 材料 = 使用Memo ( ()) + 新的 THREE.MeshStandard Matrial (), [];

使用Frame ()() {{{ a. 材料.不透明=0.5;

  • ;

返回 < 原始对象{{材料} 附加="材料" />;

但是现在反应编译器实际上把这个问题弄错了。 在React's model中,一个 ref是实际可变的概念.

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
const 材料 = 使用Memo ( ()) + 新的 THREE.MeshStandard Matrial (), [];
cst 材料 Ref = 使用Ref <THREE.MeshStandard Matrial > (null);

使用Frame ()() {{{
如果( 材料参考当前) {
a. 材料参考物;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
* ;

返回( ưμ㼯A
< 初级
对象 * * 物质}
参考文献
附件=“材料”
/ > 打开
(三)

以下是更详尽的讨论:https://GitHub.com/reactwg/react-compiller/discussions/14。

在他们的带领下, 创造可变资源的反作用安全方法 将看起来像这样 有明确的设置器。 我们可以使用设置器来变异, 但我们不能使用任务!

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? Const 材料 = 使用Resource( ()) {{{ const 值 = 新的 MeshStandard Matrial ({ 透明: true } ); 返回{ 数值, 清除:() QQ值. 处理()

  • ;
  • ;

使用Frame ()() {{{ 物质. set(m => m.opacity = 0.5)

  • ;

返回 < 原始对象> 材料. 价值} 附加=“ 材料” / > ;

内容来源: pmndrs/react-three-fiber