简体   繁体   English

ReactJs数据/组件结构

[英]ReactJs data/component structure

I am working on a reactjs application. 我正在开发一个reactjs应用程序。 I am looking to structure components. 我正在寻找结构组件。 is the following correct architecture? 以下正确的体系结构?

data{
"loft" :{},
"asking-price" :{}
}

class Factory{      
    static GetComponent(component){
        switch(component) {
            case "loft":
                return "<LoftComponent data='component'>";
                break;
            case "asking-price":
                return "<AskingpriceComponent data='component'>";
                break;
        }
    }

    //main render
    for(var i data){
        React.createElement(Factory.GetComponent(data[i]))
    }    
}

this is the latest attempt - but its not rendering -- is the mapping wrong? 这是最新的尝试-但未渲染-映射是否错误? is the case-switch wrong? 大小写切换错误吗?

 var config = [{ "craft-breweries": { "count": 5, "latest": "The Wimbledon Brewery Company Limited", "data": [{ "title": "Belleville Brewing Company", "start": 2013 }, { "title": "Kew Brewery", "start": 2015 }, { "title": "Laines Brewery (Four Thieves)", "start": 2015 }, { "title": "Sultan Brewery", "start": 2015 }, { "title": "The Wimbledon Brewery Company Limited", "start": 2015 }] }, "farmer-markets": { "count": 5 } }]; var MultipleComponents = React.createClass({ getComponent: function(config) { console.log("config", config); switch (config) { case 'craft-breweries': return <CraftBreweries /> case 'farmer-markets': return <FarmerMarket /> } }, render: function () { var config = this.props.config; return ( <div> {config.map((chartConfig, index) => { return ( <div key={index} className={'holder' + index}> {this.getComponent(chartConfig)} </div> ) })} </div> ); } }); var CraftBreweries = React.createClass({ componentDidMount: function () { var $this = $(ReactDOM.findDOMNode(this)); console.log("rendered div now engage d3"); // set el height and width etc. }, render: function () { return ( <div className="craftbreweries" data-role="craftbreweries"> You have {this.props.count} number of breweries in your area. The latest one is {this.props.latest}. </div> ); } }); var FarmerMarket = React.createClass({ componentDidMount: function () { var $this = $(ReactDOM.findDOMNode(this)); console.log("rendered div now engage d3"); // set el height and width etc. }, render: function () { return ( <div className="farmermarket" data-role="farmermarket"> You have {this.props.count} number of farmer markets in your area. </div> ); } }); ReactDOM.render( <MultipleComponents config={config} />, document.getElementById('root') ); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://npmcdn.com/react@15.3.1/dist/react.js"></script> <script src="https://npmcdn.com/react-dom@15.3.1/dist/react-dom.js"></script> <div id="root"></div> 


I managed to get 1 component rendering by doing this-- but why isn't the case switch working -- why isn't the map looping through and rendering through the keys? 通过这样做,我设法获得了1个组件的渲染-但是为什么case开关不起作用-为什么map不循环并通过键进行渲染?

getComponent: function(config) {
        console.log("config", config);
       // switch (config) {
           // case 'craft-breweries':
                //return <CraftBreweries  />
           // case 'farmer-markets':
                //return <FarmerMarket />
        //}


        //const { props } = config;
        return React.createElement(CraftBreweries, config["craft-breweries"]);
    },

I have it working at least with this setup. 我有它至少与此设置一起工作。

--- I am going to try and loop through the config[0] object and see if this can create the holders in the MulitpleComponents render. ---我将尝试遍历config [0]对象,看看是否可以在MulitpleComponents渲染中创建支架。

var config = [{
  "craft-breweries": {
    "count": 5,
    "latest": "The Wimbledon Brewery Company Limited",
    "data": [{
      "title": "Belleville Brewing Company",
      "start": 2013
    }, {
      "title": "Kew Brewery",
      "start": 2015
    }, {
      "title": "Laines Brewery (Four Thieves)",
      "start": 2015
    }, {
      "title": "Sultan Brewery",
      "start": 2015
    }, {
      "title": "The Wimbledon Brewery Company Limited",
      "start": 2015
    }]
  },
  "farmer-markets": {
    "count": 5
  }
 }];



var MultipleComponents = React.createClass({
    render: function () {
       var config = this.props.config;

       return (
            <div className="apps">
              <CraftBreweries config={config[0]["craft-breweries"]} />
              <FarmerMarket config={config[0]["farmer-markets"]} />
            </div>
        );
    }
});



var CraftBreweries = React.createClass({
    componentDidMount: function () {
        //var $this = $(ReactDOM.findDOMNode(this));
        console.log("rendered div now engage d3");
        // set el height and width etc.
    },
    render: function () {
        var props = this.props.config; 
        return (
            <div className="craftbreweries" data-role="craftbreweries">
                You have {props.count} number of breweries in your area. The latest one is {props.latest}.
            </div>
        );
    }
});

var FarmerMarket = React.createClass({
    componentDidMount: function () {
        //var $this = $(ReactDOM.findDOMNode(this));
        console.log("rendered div now engage d3");
        // set el height and width etc.
    },
    render: function () {
        var props = this.props.config; 
        return (
            <div className="farmermarket" data-role="farmermarket">
                You have {props.count} number of farmer markets in your area.
            </div>
        );
    }
});


ReactDOM.render(
    <MultipleComponents config={config} />,
    document.getElementById('root')
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM