我的问题是如何在服务器端正确设置与客户端上的react.js连接的路由。
我正在开发一个基于Meteor.js构建的应用程序,我正在与React.js集成。该应用程序将需要许多路线。我的主要问题(到目前为止)是,我预计会使用各自的(安全)密钥进行大量服务器端api调用。这些电话会像
Meteor.http.call("GET", "http://search.twitter.com/search.json?q=perkytweets");
显然,出于安全原因,这些应该是服务器端。然后我将处理服务器上的数据并传递我需要的反应,然后在DOM上呈现。
似乎Flow Router并不理想,虽然它似乎是Meteor+React
应用程序的首选,因为它侧重于客户端路由而不是我需要的服务器端路由。
通常情况下,Meteor.js应用程序是使用Iron Router构建的,但是我React
与Iron Router
一起工作时遇到了一些困难。
请注意:以下代码似乎并不表示需要任何服务器端,这是因为我只是通过教程设置了所有内容,但它最终会... .right现在只是想让路线运转起来。
我一直在做以下事情:
以下的REACT代码:
的客户机/ main.html中
<head>
<title>List</title>
</head>
<body>
<div id="render-target"></div>
</body>
的客户机/ main.jsx
import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import App from '../imports/ui/App.jsx';
Meteor.startup(() => {
render(<App />, document.getElementById('render-target'));
});
进口/ UI / App.jsx
import React, { Component } from 'react';
import Spot from './Spot.jsx';
// App component - represents the whole app
export default class App extends Component {
getSpots() {
return [
{ _id: 1, text: 'This is task 1' },
{ _id: 2, text: 'This is task 2' },
{ _id: 3, text: 'This is task 3' },
];
}
renderSpots() {
return this.getSpots().map((spot) => (
<Spot key={spot._id} spot={spot} />
));
}
render() {
return (
<div className="container">
<header>
<h1>List</h1>
</header>
<ul>
{this.renderSpots()}
</ul>
</div>
);
}
}
进口/ UI / Spot.jsx
import React, { Component, PropTypes } from 'react';
// Task component - represents a single todo item
export default class Spot extends Component {
render() {
return (
<li>{this.props.spot.text}</li>
);
}
}
Spot.propTypes = {
// This component gets the task to display through a React prop.
// We can use propTypes to indicate it is required
spot: PropTypes.object.isRequired,
};
尝试修复#1:
服务器/ main.js
import { Meteor } from 'meteor/meteor';
Meteor.startup(() => {
// code to run on server at startup
});
Router.route('/', function () {
this.layout('homePage');
});
的客户机/ main.html中
<tempate name="homePage">
<head>
<title>List</title>
</head>
<body>
<div id="render-target"></div>
</body>
</template>
答案 0 :(得分:1)
此处无需使用服务器端路由,只需创建服务器端Meteor方法即可执行API调用,并显示其结果。
此示例组件在安装时调用方法,并异步处理其返回值。
export class Pony extends React.Component {
// ...
componentDidMount() {
Meteor.call("call-pony-name-api", customPonyParameter, (error, result) => {
if (error) {...}
this.setState({ponyName: result.ponyName});
});
}
}