【问题标题】:Meteor- React: Withtracker not running when subscribeMeteor-React:订阅时Withtracker未运行
【发布时间】:2019-09-24 08:52:21
【问题描述】:

我正在尝试从与用户在表单中输入的 id 匹配的集合中获取文档。所以我正在做的是在输入发生变化时订阅该出版物。这行得通。我的问题是,当用户输入匹配的 id 时,withtracker 的道具被数据填充,但用户第二次尝试使用完全不匹配的 id 时道具不会改变,之前的数据是仍在显示。

这是我的 withtracker 代码

export default PlantDetailsContainer = withTracker(() => {
    Meteor.subscribe('stickerById', null);
    return {
      stickeringDetails: Sticker.findOne()
    }
})(AddPlantDetails);

这是我调用用户输入更改的函数

handleIdChange = (e) => {
    Meteor.subscribe('stickerById', parseInt(e.target.value));
  }

这是我的发布代码

Meteor.publish('stickerById', function stickerByIdPublication(id) {
        return Sticker.find({ids: {"$in": [id]}});
    });

【问题讨论】:

    标签: reactjs meteor


    【解决方案1】:

    您不需要在每次值更改时重新订阅。

    Meteor 在withTracker 方法中做了一些魔术来设置反应性。因此,请确保在该点传入 id(通常来自路由参数)。

    不确定 id 来自哪里 - 是用户输入的,还是下拉的?

    【讨论】:

    • 用户输入的id。如何将组件中的 id 传递给 withTracker
    • 在渲染的时候把id传给React组件,比如<MyPlantContainer id={stickerId}/>假设你在用钩子,stickerId是一个状态值
    • 我只会从用户输入中获取 id,这发生在组件渲染之后。所以我必须创建一个子组件,每次用户输入数据时我都必须渲染子组件。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2016-08-07
    相关资源
    最近更新 更多