控制台日志有效,但 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
我正在使用 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