鍍金池/ 問(wèn)答/HTML/ react 高階組件無(wú)法獲取json 數(shù)據(jù),請(qǐng)?jiān)趺床拍茏x取數(shù)據(jù)

react 高階組件無(wú)法獲取json 數(shù)據(jù),請(qǐng)?jiān)趺床拍茏x取數(shù)據(jù)

import React from 'react'

import { Foundation } from './foundation'


class BarAA extends React.Component {

    constructor() {
        super();
        //localStorage.username='再見(jiàn)';
        this.state = {
            defaultProps: {
                autoPlay: false,
                maxLoops: 10
            }
        }
    }


    render() {

        return (
            <div>baraaaaaaa</div>
        )
    }
}

BarAA = Foundation(BarAA);

export default BarAA;
import React from 'react';

// HOC 工廠實(shí)現(xiàn)方法

export const Foundation = (WrappedComponent) => {

    class NewComponent extends React.Component {
        constructor() {
            super();
        }

        _init() {
            // 參數(shù)設(shè)置
            var doc = document.getElementById('ec');
            var optionECharts = {
                title: {
                    text: 'ECharts 入門(mén)測(cè)試開(kāi)始'
                },
                tooltip: {},
                legend: {
                    data: ['銷(xiāo)量']
                },
                xAxis: {
                    data: ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子", "無(wú)敵"]
                },
                yAxis: {},
                series: [{
                    name: '銷(xiāo)量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20, 90]
                }]
            };

            return import(/* webpackChunkName: "echarts" */ 'echarts').then(echarts => {
                // 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
                var myChart = echarts.init(document.getElementById('ec'));
                // 指定圖表的配置項(xiàng)和數(shù)據(jù)
                var option = optionECharts;
                // 使用剛指定的配置項(xiàng)和數(shù)據(jù)顯示圖表。
                myChart.setOption(option);
            }).catch(error => 'An error occurred while loading the component');
        }

        showJson(){
            var test;
            if(window.XMLHttpRequest){
                test = new XMLHttpRequest();
            }else if(window.ActiveXObject){
                test = new window.ActiveXObject();
            }else{
                console.log("請(qǐng)升級(jí)至最新版本的瀏覽器");
            }
            if(test !=null){
                test.open("GET","./json.json",true);
                test.send(null);
                test.onreadystatechange=function(){
                    if(test.readyState==4&&test.status==200){
                        var obj = JSON.parse(test.responseText);
                        for (var name in obj){
                            console(obj[name].key);
                        }
                    }
                };

            }
        }

        componentDidMount() {

            this._init()
        }


        componentWillMount() {
            this.showJson();
        }


        render() {
            return (
                <div>
                    <WrappedComponent { ...this.props } />
                </div>
            )
        }
    }

    return NewComponent

}

export default Foundation;

json.json

[{
  "key":"value"
}
]

圖片描述

圖片描述

回答
編輯回答
薄荷糖

你的報(bào)錯(cuò)信息已經(jīng)告訴你了,NOT FOUND, 為什么not found 報(bào)錯(cuò)信息也告訴你了--- 鏈接, 是因?yàn)槟氵\(yùn)行本地服務(wù)器上的 根文件 中沒(méi)有找到, 你可以吧他放到根文件中,或者 get 的url 寫(xiě)到你的 components/bar01/json.json。

2017年12月14日 11:00
編輯回答
放開(kāi)她
import React from 'react';

// HOC 工廠實(shí)現(xiàn)方法

export const Foundation = (WrappedComponent) => {

    class NewComponent extends WrappedComponent {
        constructor() {
            super();
        }

        _init() {
            // 參數(shù)設(shè)置
            var doc = document.getElementById('ec');
            /*
            var optionECharts = {
                title: {
                    text: 'ECharts 入門(mén)測(cè)試開(kāi)始'
                },
                tooltip: {},
                legend: {
                    data: ['銷(xiāo)量']
                },
                xAxis: {
                    data: ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子", "無(wú)敵"]
                },
                yAxis: {},
                series: [{
                    name: '銷(xiāo)量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20, 90]
                }]
            };
            */

            return import(/* webpackChunkName: "echarts" */ 'echarts').then(echarts => {
                // 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
                var myChart = echarts.init(document.getElementById('ec'));
                // 指定圖表的配置項(xiàng)和數(shù)據(jù)
                var option = this.state.optionECharts;
                // 使用剛指定的配置項(xiàng)和數(shù)據(jù)顯示圖表。
                myChart.setOption(option);
            }).catch(error => 'An error occurred while loading the component');
        }

        showJson(){
            var test;
            if(window.XMLHttpRequest){
                test = new XMLHttpRequest();
            }else if(window.ActiveXObject){
                test = new window.ActiveXObject();
            }else{
                console.log("請(qǐng)升級(jí)至最新版本的瀏覽器");
            }
            if(test !=null){
                test.open("GET","components/bar01/json.json",true);
                test.send(null);
                test.onreadystatechange=function(){
                    if(test.readyState==4&&test.status==200){
                        var obj = JSON.parse(test.responseText);
                        for (var name in obj){
                            console.log(obj[name].key);
                        }
                    }
                };

            }
        }

        componentDidMount() {

            this._init()
        }


        componentWillMount() {
            this.showJson();
            //console.log(this.state.optionECharts)
        }


        render() {

            const newProps = {
                name: "cqm",
                value: "testData",
            }

            return (
                <div>
                    <div id={'ec'} style={{width: 500, height: 500}}></div>
                    <WrappedComponent {...this.props} {...newProps}/>
                </div>
            )
        }
    }

    return NewComponent

}

export default Foundation;

2017年10月15日 00:43