收藏
回答

多个Component引用同一个behaviors会导致behaviors被污染

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 工具 7.0.2 2.6.6

index中包含多个自定义组件A、B、C,他们共同引用了一个behaviors "common",common中含有一个config字段,那么在A中修改A的config字段会导致BC两个组件的config字段被修改?


这是BUG还是设计?

回答关注问题邀请回答
收藏

3 个回答

  • LastLeaf
    LastLeaf
    2019-05-13

    设计如此。不像常规继承机制,这里的 data 是“共享”的。我们尚在考虑是否要给 behaviors 增加 privateData 和 provateMethods 。如有意见或建议,欢迎回帖讨论。

    2019-05-13
    有用
    回复 6
    • 2019-05-14

      我们目前所希望实现的功能是通过wxif去加载某一个Component(类似动态选择渲染模板),并且使用behavios为不同的Component提供公用方法,由于behavios的data之外的属性无法被Component覆盖,所以这些方法所设计到的数据只能存在data里面(即使不需要被渲染),如果这些公用数据会被所有引用者共同维护,为了避免被覆盖。每个Component只能使用带前缀的值,一来增加了渲染量,二来使得behavios的公用方法无法使用确定的字段做为数据源。


      我现在想到的fix方式是在compoent初始化时再去用自己的私有属性去覆盖data.config对应部分,但这也仅仅能处理只有一个Component展示的情况。


      也就是说现有的设计中Component无法支撑通过wxif动态加载的逻辑设计,而只能单独地出现在某个页面中,请问现在小程序内实现这种设计有没有比较好的实践方式?


      2019-05-14
      回复
    • LastLeaf
      LastLeaf
      2019-05-14回复

      抱歉。之前理解错了你的问题。


      按设计预期来看,不同组件实例引用同一个 behavior , behavior 里面的 data 不在两个组件实例间共享(但 behavior 会和引用它的组件实例共享)。


      代码片段已收到。我们调查一下。

      2019-05-14
      回复
    • LastLeaf
      LastLeaf
      2019-05-14回复

      查到是基础库里面有个拼 behavior 字段的 bug 。之后我们会尝试修复。


      界面无关的数据在 created 的时候往 this 上面挂比较好。

      2019-05-14
      回复
    • 2019-05-14回复LastLeaf

      好的谢谢

      2019-05-14
      回复
    • 2019-05-21回复LastLeaf

      再报告一个问题,在上述情况下如果多个Component的wxss import了同一个common.wxss也会导致各Component内样式和keyframe的冲突

      2019-05-21
      回复
    查看更多(1)
  • 月浓乌浓
    月浓乌浓
    2022-09-22
    const useBehavior = () => Behavior({
      data: {
        test: 114514
      }
    })
    const testBehavior = useBehaviors()
    
    Component({
      behaviors: [testBehavior]
    })
    
    2022-09-22
    有用
    回复
  • 是小白啊
    是小白啊
    2019-05-10

    麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-05-10
    有用
    回复 4
    • 2019-05-10

      直接开发工具就行,不用机型微信

      https://developers.weixin.qq.com/s/pOik4gmz7s8M


      2019-05-10
      回复
    • 是小白啊
      是小白啊
      2019-05-10回复

      修改这?

      2019-05-10
      回复
    • 2019-05-10回复是小白啊

      即在各组件中定义这个config字段,会导致所有组件的config混在一起。对于同名字段(例子中的id)甚至无法保证是本文件config中设置的。这样的结果使得组件不断增多的情况下会对旧有的组件产生不可预测的影响。

      2019-05-10
      回复
    • 2019-05-13回复是小白啊

      请问是否能给个回应,如果是我使用方法问题(我希望每个组件通过behavios的值做为默认数据初始化自己)是否可以指出来我好修改,如果是BUG或设计如此我好另想办法。

      2019-05-13
      回复
登录 后发表内容