第一次使用反应。如何将 rss 项目放入组件中?
First time using react. How to get rss items into a component?
这是我第一次使用react。我从 jQuery 来到 React,这感觉像是一个巨大的飞跃。如果有人能帮助我重构它以 React 的方式工作,我将永远欠你的债! :)
我正在尝试解析 RSS 提要,我想在其中获取最新的 post 标题和 link 以呈现到组件中。
https://www.npmjs.com/package/rss-parser - 使用它来获取解析器。
在浏览器中查看我的应用程序时,异步功能将 rss 提要吐出到控制台,我想这是一个好的开始!
// src/App/index.tsx
import * as React from 'react';
import * as Parser from 'rss-parser';
// Types
import { string } from 'prop-types';
let parser = new Parser();
// blueprint for the properties
interface Props {
name: string;
}
// Component state
interface State {
//feed: any[];
}
(async () => {
let feed = await parser.parseURL('https://www.reddit.com/.rss');
console.log(feed.title);
feed.items.forEach((item: { title: string; link: string; }) => {
console.log(item.title + ':' + item.link)
});
})();
export default class App extends React.Component<Props, State> {
render() {
return (
<div>
<h1>RSS Feed</h1>
<div>
<h1>item.title</h1>
<a href="">item.link</a>
</div>
</div>
);
}
}
如果我没理解错的话,你需要这样的东西:
export default class App extends React.Component<Props, State> {
constructor(props: {}) {
super(props);
this.state = { feed: [] };
}
async componentDidMount() {
const feed = await parser.parseURL('https://www.reddit.com/.rss');
this.setState({ feed });
}
render() {
return (
<div>
<h1>RSS Feed</h1>
this.state.feed.map((item, i) => (
<div key={i}>
<h1>item.title</h1>
<a href="">item.link</a>
</div>
))
</div>
);
}
}
我遇到了同样的问题并通过这个解决了。如果您不检查“未定义”值。它会向您显示错误,因为 React 渲染页面 2 次,并且在第一次渲染时您手上有一个未定义的 feed.items
数组。
我的 index.js 文件:
import React from 'react'
import {render} from 'react-dom';
let Parser = require('rss-parser');
let parser = new Parser();
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/";
class App extends React.Component{
constructor(props) {
super(props);
this.state = {
feed: []
};
}
async componentDidMount() {
const feed = await parser.parseURL(CORS_PROXY + 'https://www.reddit.com/.rss');
this.setState(feed)
}
render() {
return (
<div>
<h1>Blog Posts</h1>
{this.state.items && this.state.items.map((items, i) => (
<div key={i}>
<h1>{items.title}</h1>
<a href="">{items.link}</a>
</div>
))}
</div>
);
}
}
render(
<App />,
document.getElementById("root")
)
这是我第一次使用react。我从 jQuery 来到 React,这感觉像是一个巨大的飞跃。如果有人能帮助我重构它以 React 的方式工作,我将永远欠你的债! :)
我正在尝试解析 RSS 提要,我想在其中获取最新的 post 标题和 link 以呈现到组件中。
https://www.npmjs.com/package/rss-parser - 使用它来获取解析器。
在浏览器中查看我的应用程序时,异步功能将 rss 提要吐出到控制台,我想这是一个好的开始!
// src/App/index.tsx
import * as React from 'react';
import * as Parser from 'rss-parser';
// Types
import { string } from 'prop-types';
let parser = new Parser();
// blueprint for the properties
interface Props {
name: string;
}
// Component state
interface State {
//feed: any[];
}
(async () => {
let feed = await parser.parseURL('https://www.reddit.com/.rss');
console.log(feed.title);
feed.items.forEach((item: { title: string; link: string; }) => {
console.log(item.title + ':' + item.link)
});
})();
export default class App extends React.Component<Props, State> {
render() {
return (
<div>
<h1>RSS Feed</h1>
<div>
<h1>item.title</h1>
<a href="">item.link</a>
</div>
</div>
);
}
}
如果我没理解错的话,你需要这样的东西:
export default class App extends React.Component<Props, State> {
constructor(props: {}) {
super(props);
this.state = { feed: [] };
}
async componentDidMount() {
const feed = await parser.parseURL('https://www.reddit.com/.rss');
this.setState({ feed });
}
render() {
return (
<div>
<h1>RSS Feed</h1>
this.state.feed.map((item, i) => (
<div key={i}>
<h1>item.title</h1>
<a href="">item.link</a>
</div>
))
</div>
);
}
}
我遇到了同样的问题并通过这个解决了。如果您不检查“未定义”值。它会向您显示错误,因为 React 渲染页面 2 次,并且在第一次渲染时您手上有一个未定义的 feed.items
数组。
我的 index.js 文件:
import React from 'react'
import {render} from 'react-dom';
let Parser = require('rss-parser');
let parser = new Parser();
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/";
class App extends React.Component{
constructor(props) {
super(props);
this.state = {
feed: []
};
}
async componentDidMount() {
const feed = await parser.parseURL(CORS_PROXY + 'https://www.reddit.com/.rss');
this.setState(feed)
}
render() {
return (
<div>
<h1>Blog Posts</h1>
{this.state.items && this.state.items.map((items, i) => (
<div key={i}>
<h1>{items.title}</h1>
<a href="">{items.link}</a>
</div>
))}
</div>
);
}
}
render(
<App />,
document.getElementById("root")
)