栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MobX-在将数据注入到React组件时可以使用`inject`时为什么要使用`observer`

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MobX-在将数据注入到React组件时可以使用`inject`时为什么要使用`observer`

我相信您的评估是正确的。为了清楚起见,让我尝试重新措辞:

@observer
render
当这些值之一更改时,跟踪哪些可观察对象由组件使用并自动重新渲染。

我们应该注意,根据您的示例,

@observable
使用的值
render
可能深深嵌套在给定的值中
prop

class Store{  @observable data = {    nesteddata: {      // changes to `deepData` would theoretically re-render any observer      deepdata: 'my_data'     }  }}

使用观察者,即使上一个可观察的对象嵌套在数据存储区的深处,最后一次渲染中所有访问的可观察的对象的更改也将导致重新渲染

答对了!

尽管会有一个奇怪的地方

observable
,稍后您会看到…


另一方面,您有

@inject
哪些可通过
props
定义的特定数据结构(通过)提供给组件
Provider

例如:

@inject('title')class MyComponent extends React.Component {    render() {        return (<div>{this.props.title}</div>);    }}const Container = () => (    <Provider title="This value is passed as a prop using `inject`">        <MyComponent />    </Provider>);

仅当在注入器功能中访问的可观察对象发生更改时,才注入重新渲染。

答对了!

inject
仅当
prop
自身已识别出更改时才生成重新渲染。


实际上,shouldComponentUpdate()和-的深度比较实际上是相同的问题,

props
尽管它
observer
似乎比效率更高
shouldComponentUpdate

我认为,最好仅使用注入,因为它可以为您提供更多控制权,并且可以防止不必要的重新渲染。

我并不一定要走那么远……这完全取决于您的代码结构。

如果我这样修改您的原始示例:

class Store{    @observable data = {        nesteddata: {}    };    constructor() {        this.data.nestedData.deepData = 'my_data';    }}

…添加的

deepData
w实际上不会作为可观察的变化(即重新渲染)被拾取,因为当我们最初将其标记
data
为可观察的值时,该属性不存在。这是一个问题。

另一种方法可能是执行以下操作:

class Person {    @observable name = 'John Doe';}class Store{    @observable data = null;    constructor() {        this.data = new Person();    }}

这使您可以将可观察的值分散到各个类中-
因此您可能仍想注入

Store
一个组件(以进行访问,
Store.data
但最终所有可观察的更改都来自更新
Person



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399675.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号