【问题标题】:JS Rendering within ReactReact 中的 JS 渲染
【发布时间】:2017-06-07 23:17:06
【问题描述】:

我有 javascript - webscraper。我在我的 ReactJS 应用程序的组件文件夹中添加了这个。我正在尝试将其渲染到网页中。

我在其他组件中使用的 JSX 组件来渲染它。

如何将此 webscraper javascript 的输出获取到网页中。 我知道必须更改 console.log() 语句,但我不知道如何继续。


var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: false})

nightmare
  .goto('http://javascriptissexy.com/16-javascript-concepts-you-must-know-well/')

  //.wait('#entry-content')
  .evaluate(function () {
    var ht = document.querySelector('li');
    //return ht[0];
    //return (ht.split(/\r\n|\r|\n/).length);
    //check = document.querySelectorAll('#bodyblock > ul >li').length;
    //return check;
    //var ht1 = document.querySelectorAll('#bodyblock > ul > li ').innerText[5];
    //return ht1;
    return ht;


  })
  .end()
  .then(function (result) {
    console.log(result)
  })
  .catch(function (error) {
    console.log('Search failed:', error);
  });

【问题讨论】:

  • 可能会做一个this.setState 并在网页某处呈现该变量

标签: javascript reactjs web-scraping nightmare


【解决方案1】:

你上面的函数只是获取数据,然后如果你想在反应页面上显示数据,你将不得不使用this.setState()并且页面将被重新渲染。

我假设上面的函数运行良好,那么你可以这样使用:(根据 React 组件的生命周期):

import React from 'react';
import Nightmare from 'nightmare';

export default class MyClass extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            resultFromScraping: '',
        }
    }

    componentWillMount() {
        var nightmare = Nightmare({ show: false});

        nightmare
            .goto('http://javascriptissexy.com/16-javascript-concepts-you-must-know-well/')

            //.wait('#entry-content')
            .evaluate(function () {
                var ht = document.querySelector('li');
                //return ht[0];
                //return (ht.split(/\r\n|\r|\n/).length);
                //check = document.querySelectorAll('#bodyblock > ul >li').length;
                //return check;
                //var ht1 = document.querySelectorAll('#bodyblock > ul > li ').innerText[5];
                //return ht1;
                return ht;


            })
            .end()
            .then( (result) => { //here we use lexical binding, to bind this callback function to the current react component
                console.log(result);
                this.setState({
                    resultFromScraping: JSON.stringify(result), //this is just an example, you can do whatever you want with the result here
                });

            })
            .catch(function (error) {
                console.log('Search failed:', error);
            }); 
    }

    render() {
        return (
            <div>{this.state.resultFromScraping}</div>
        );
    }
}

如果您有任何错误,请在此处发布,以便我们找到解决方案,谢谢^^!

【讨论】:

  • 非常感谢您花时间写下代码。因为我是初学者,所以这真的很有帮助。我现在要试试这个。男人!!你太棒了!
  • 我有一个问题,而不是“导出默认类 MyClass 扩展 React.Component” 我可以使用 var webScrape = React.createClass 吗? 2)我可以使用 var 代替 import 吗?你做这个人有什么特别的原因吗?由于我正在学习,我正在努力使其成为我的可读级别。
  • 是的,你可以使用“React.createClass”,但我建议你使用 ES6 语法(就像我的代码一样,ES6 是现代且很棒的^^)
  • 你可以参考这里的 React ES6 教程:blog.risingstack.com/the-react-way-getting-started-tutorial 如果你觉得这真的很有帮助,也请考虑投票,谢谢^^
  • 我希望,但我没有足够的声誉。不过还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 2021-12-29
  • 2020-03-22
  • 2016-08-02
  • 1970-01-01
  • 2021-11-29
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多