gpt4 book ai didi

javascript - React Komposer、React 和 Meteor

转载 作者:行者123 更新时间:2023-11-29 19:10:49 26 4
gpt4 key购买 nike

我正在使用 react Komposer meteor 和 react 。我有这个组件

import React from 'react';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';

const lightMuiTheme = getMuiTheme(lightBaseTheme);

const Questiondetails = ({ thequestion }) => (
<div>
<MuiThemeProvider muiTheme={lightMuiTheme}>
<h4>{thequestion.header}</h4>
</MuiThemeProvider>
</div>
);


export default Questiondetails;

这是容器

import { Meteor } from 'meteor/meteor';
import React from 'react';
import { composeWithTracker } from 'react-komposer';
import CircularProgress from 'material-ui/CircularProgress';
import darkBaseTheme from 'material-ui/styles/baseThemes/darkBaseTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import Questiondetails from '../../../ui/components/Questiondetails/Questiondetails.jsx';
import Questions from '../../Collections/Questions/Questions.js';

function composer(props, onData) {
const handle = Meteor.subscribe('singleQuestion', props._id);

if (handle.ready()) {
const thequestion = Questions.findOne({ id: props._id });
onData(null, { thequestion });
}
}

const darkMuiTheme = getMuiTheme(darkBaseTheme);

const MyLoading = () => (<div style={{ width: '90%', position: 'relative' }}>
<MuiThemeProvider muiTheme={darkMuiTheme}>
<div style={{ margin: 'auto', right: 0, left: 0, maxWidth: 200, position: 'relative' }}>
<CircularProgress size={1.0} />
</div>
</MuiThemeProvider>
</div>);

export { MyLoading };

export default composeWithTracker(composer, MyLoading)(Questiondetails);

我从 Tracker 重新计算函数中得到 异常:
debug.js:41TypeError: 无法读取未定义的属性“header”
我能做什么。当我看 meteor 玩具时。我可以在组件中看到订阅。

这是我的出版物

import { Meteor } from 'meteor/meteor';

// import the db
import Questions from '../../../../api/Collections/Questions/Questions.js';

// the publish
Meteor.publish('singleQuestion', function(id){
return Questions.find({ _id: id });
});

最佳答案

很可能你没有得到数据记录。

即使在订阅 handle 准备就绪之后,查询也可能返回 undefined,这可能是因为集合中没有数据,或者您的查询是错误的。

在这种情况下,查询似乎确实是错误的,导致您将 undefined 传递给组件而不是预期的对象。

如果您提供一个字符串作为 find()findOne() 的第一个参数,则假定您指的是 _id ,因此它可以防止错误,例如您使用 id 键而不是 _id).

您可以使用 error 参数来更轻松地捕获此类情况(并在实际出错时显示有意义的错误消息)。

我还建议将 thequestion 更改为简单的 questiontheQuestion(更具可读性),除非有充分的理由不这样做。

function composer(props, onData) {
const handle = Meteor.subscribe('singleQuestion', props._id);

if (handle.ready()) {
const question = Questions.findOne(props._id);
let error = null;
if (!question) {
error = new Error('no question matches the provided id');
}
onData(error, {question});
}
}

关于javascript - React Komposer、React 和 Meteor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38972184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com