控制台日志有效,但 return 在 Meteor 中无效

console log works but return does not work in Meteor

我正在使用 React Hook 并尝试将一个非常简单的方法从一个文件导出到我的组件文件中。

我有一个名为 get.js 的文件,其中包含以下代码。

import { Tracker } from 'meteor/tracker'
import { Tasks } from '../../tasks';

export default getTask = () => {
  Tracker.autorun(function() {
    Meteor.subscribe('taskList', function() {
      return Tasks.find({something: false}).fetch()
    })
  }
}

在另一个文件中,我导入了getTask方法并将其放入useEffect函数

import React, { useState, useEffect } from "react";
import getTask from '../api/tasks/methods/get'

export default Tasks = () => {  
  const [data, setData] = useState({});
  useEffect(() => {
    getTask()
  })
  return (
    <div>
     ...
    </div>
  )
}

我的问题在 get.js 文件中,如果我尝试这样做

console.log Tasks.find({something: false}).fetch()

居然把我要的数据数组给打出来了。但如果我这样做

return Tasks.find({something: false}).fetch()

我得到的是 undefined。如何让数据至少在我的组件文件中设置状态?

以下代码不是订阅在 Meteor 中的工作方式:

Tracker.autorun(function() {
  Meteor.subscribe('taskList', function() {
    return Tasks.find({something: false}).fetch()
  })
}

订阅 return handles that switch state when ready. Also it seems, that you try to return data in a callback, which basically does not work

因此,为了做到这一点,您可以将您的方法 getTask 转换为无状态的并全局订阅 taskList

import { Tasks } from '../../tasks';

Meteor.startup(() => {
  Meteor.subscribe('taskList')
})

export default getTask = () => Tasks.find({ something: false }).fetch()

请注意,这根本不是反应式的,Meteor 提供了一个跟踪器集成以使用 withTracker 进行反应:https://guide.meteor.com/react.html#using-withTracker