-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【Question】数组对象更新时,是否有辅助工具缩小更新范围 #7
Comments
这样,当执行 因此,
批量更新就会产生batch事件, 以上就是 同时使用 这与 |
如果使用以下方法: ()=>{
const [state] = store.useState({
orders:[
{price:100,count:10,total:1000},
{price:100,count:10,total:1000},
{price:100,count:10,total:1000},
{price:100,count:10,total:1000},
]
})
return {
state.orders.map(order=>{
return <div>{order.price}</div>
})
}
} 像上面这种用法,当修改数组中的任意一项 优化方式就是直接使用信号组件,如下: ()=>{
const {state,$} = useStore({
orders:[
{price:100,count:10,total:1000},
{price:100,count:10,total:1000},
{price:100,count:10,total:1000},
{price:100,count:10,total:1000},
]
})
return {
state.orders.map(order=>{
return <div>{$(‘order.price’)}</div>
})
}
} 这种方式内部也是使用了
而 |
与helux相对,原理基本一样
|
信号组件对老项目的代码模式破坏性较大(这也是helux提供这个功能但提倡针对静态ui多动态ui少的混合ui使用的原因,要不然会变成满天信号),传统的react组件模式都是( Smart Comp + Dumb Comp )模式,Dumb 就是纯纯的ui,对应纯函数(也方便jest单测时基于快照做测试),在list 元素场景里,其实大多数场景更新粒度到组件即可,即 List 变 + 某个ListItem 变,(其他ListItem均不变),建议也提供符合传统用户直觉编码方式的辅助工具。 |
就如我在这篇文章里面介绍的一样。 信号组件简单直观,更新哪里就渲染哪里,API设计上也比较简单。、
// 组合信号
{$(state=>state.user.firstName + ' ' + state.user.lastName)}
// 自定义渲染
<ColorBlock name="Age">{$(
// 自定义渲染函数
({value})=>{
return <div style={{position:'relative',display:'flex',alignItems:'center',color:'red',background:"white"}}>
<span style={{flexGrow:1}}>{value}</span>
<Button onClick={()=>state.user.age++}>+Age</Button>
</div>
},
// 状态数据的路径
"user.age"
)}</ColorBlock> 当然,任意技术均有其局限性。 |
两种技术流派的较量:
好坏见仁见智吧,都有可取之处吧。 我个人觉得, 因为任何DOM元素的重新渲染均有可能导致父元素乃致祖先元素,甚至整个文档的回流和重绘。 如果, 也就是说,基于 但是,使用 |
没有具体说哪种不好,哪种更合适,建议两种都提供,要不然对推广不太有利,老项目改造成本也很大。 helux 内部使用时(对接大量老项目)signal使用场景( 包含 Block $ 两种方式)仅占了30%,所以新增了版本化比较的 |
见示例的 AutoListObj.tsx 文件,
对比 HeluxListObj.tsx 文件,helux提供了
shallowCompare
来比较对象(支持比较深度节点变化的数据,因内部比较的是版本号,故比较效率也非常之高)The text was updated successfully, but these errors were encountered: