2016-10-12 16 views
2

反応コンポーネントライブラリを作成しようとしていますので、アプリケーション全体を通して使用できます。私は図書館の最初の部分をテーブルにしていますが、これはまだテスト段階ですが、コンポーネントを呼び出して呼び出されたページでそのコンポーネントを作成する方法を理解できません。現在のところ、これはその動作方法です。私はまたReactで昨日プログラミングを始めたばかりです。反応テーブルの再利用方法

HTML

<script type="text/babel" src="/js/reactcomponents/table.js"></script> 
<div id="loadboardContainer"> 
    <div class="table-desc">Future Loads</div> 
    <div id="futureLoadsContainer"></div> 

    <div class="table-desc">Todays Loads</div> 
    <div id ="todaysLoadsContainer"></div> 

    <div class="table-desc">Active Loads</div> 
    <div id ="activeLoadsContainer"></div> 
</div> 

は、その後、私は私のコンポーネントを反応させてきました。

var Table = React.createClass({ 
    getInitialState: function() { 
    return { 
     results: [], 
     columns: [] 
    } 
    }, 
    componentDidMount: function() { 
    this.serverRequest = $.get(this.props.source, function(result) { 
     result = JSON.parse(result); 

     if(result['resultRows'] == undefined){ 
     result['resultRows'] = []; 
     } 

     this.setState({ 
     results: result['resultRows'], 
     columns: $.makeArray(result['resultCols']) 
     }); 
    }.bind(this)); 
    }, 
    componentWillUnmount: function(){ 
    this.serverRequest.abort(); 
    }, 
    render: function() { 
    // Set array for rows. 
    var rows = []; 
    var header = []; 

    this.state.columns.map(function(cols) { 
     header.push(<TableColumns data={cols.cols} key={cols.id} />); 
    }); 

    this.state.results.map(function(result) { 
     rows.push(<TableRow data={result.rows} key={result.id} />); 
    }); 

    // Return the table. 
    return (
     <table className="table table-condensed table-bordered no-bottom-margin"> 
     <thead> 
      {header} 
     </thead> 
     <tbody> 
      {rows} 
     </tbody> 
     </table> 
    ); 
    } 
}); 

// Set up columns 
var TableColumns = React.createClass({ 
    render: function() { 
    var colNodes = this.props.data.map(function(col, i){ 
     return (
     <th key={i}>{col}</th> 
    ); 
    }); 
    return (
     <tr> 
     {colNodes} 
     </tr> 
    ); 
    } 
}); 

// Set up row 
var TableRow = React.createClass({ 
    render: function() { 
    var rowNodes = this.props.data.map(function(row, i){ 
     return (
     <td key={i}>{row}</td> 
    ); 
    }); 
    return (
     <tr> 
     {rowNodes} 
     </tr> 
    ); 
    } 
}); 

var futureContainer = document.getElementById('futureLoadsContainer'); 
var todaysContainer = document.getElementById('todaysLoadsContainer'); 
var activeContainer = document.getElementById('activeLoadsContainer'); 

ReactDOM.render(<Table source="/reactloadboard/react/getFutureTableValues.php" />, futureContainer); 
ReactDOM.render(<Table source="/reactloadboard/react/getTodaysTableValues.php" />, todaysContainer); 
ReactDOM.render(<Table source="/reactloadboard/react/getActiveTableValues.php" />, activeContainer); 

そして、私はHTMLにtable.jsファイルをインポートすると、これは動作しますが、私はそれがコンポーネントの使用状況により普遍的とhtmlに呼び出される

var futureContainer = document.getElementById('futureLoadsContainer'); 
var todaysContainer = document.getElementById('todaysLoadsContainer'); 
var activeContainer = document.getElementById('activeLoadsContainer'); 

ReactDOM.render(<Table source="/reactloadboard/react/getFutureTableValues.php" />, futureContainer); 
ReactDOM.render(<Table source="/reactloadboard/react/getTodaysTableValues.php" />, todaysContainer); 
ReactDOM.render(<Table source="/reactloadboard/react/getActiveTableValues.php" />, activeContainer); 

を削除したいです/ phpページは以下のようになります。

<script type="text/babel" src="/js/reactcomponents/table.js"></script> 
    <div id="loadboardContainer"> 
      <div class="table-desc">Future Loads</div> 
      <div id="futureLoadsContainer"></div> 

      <div class="table-desc">Todays Loads</div> 
      <div id ="todaysLoadsContainer"></div> 

      <div class="table-desc">Active Loads</div> 
      <div id ="activeLoadsContainer"></div> 
     </div> 

var futureContainer = document.getElementById('futureLoadsContainer'); 
    var todaysContainer = document.getElementById('todaysLoadsContainer'); 
    var activeContainer = document.getElementById('activeLoadsContainer'); 

    ReactDOM.render(<Table source="/reactloadboard/react/getFutureTableValues.php" />, futureContainer); 
    ReactDOM.render(<Table source="/reactloadboard/react/getTodaysTableValues.php" />, todaysContainer); 
    ReactDOM.render(<Table source="/reactloadboard/react/getActiveTableValues.php" />, activeContainer); 

作品は正常に動作しているが、私はHTMLページにReactDom.rendersを削除した場合、私は実際にそれに部品を入れています最初の方法は、コンポーネントの表が存在しないことを言います。とにかく、後でこのアプリケーションを実行するには、テーブルを持っているときにtable.jsのコンポーネントをインポートしてソースとそこに接続するだけです。私はここで他の答えを見てきましたが、主にユーザビリティのデータを扱っているようです。

答えて

0

あなたが使用してエクスポートする必要があります。ここでは

は、あなたがそれを成し遂げる必要がある方法ですmodule.exportsあなたはReactにES6を使用していないためです。

var Table = React.createClass({ 
     ... 
}); 
var TableColumns = React.createClass({ 
... 
}); 

var TableRow = React.createClass({ 
    ... 
}); 

//Export the table component 
module.exports = Table; 

また事はあなたのコードをtranspileするwebpackまたはbrowserifyのいずれかを使用する必要があるので、JSXのサポートを持たないブラウザです。

良いチュートリアルリンク Webpack tutorial

+0

これはモジュールが定義されていないことを示しています。他のプラグインやインストールが必要なものはありますか? –

+0

まあ、ブラウザはJSXをサポートしていないので、webpackまたはbrowserifyのいずれかを使用する必要があります。良いチュートリアルのリンクhttps://www.codementor.io/reactjs/tutorial/beginner-guide-setup-reactjs-environment-npm-babel-6-webpack –

+0

素晴らしいことができました! –

0

あなたはほとんどそこにいます。

Table.js

var Table = React.createClass({ 
     //Everything stays same here 
}); 
var TableColumns = React.createClass({ 
// Stays same here too 
}); 

var TableRow = React.createClass({ 
    // This remains same 
}); 

//Export the table component 
export default Table; 

HTMLあなたのHTMLのテーブルコンポーネントを使用するためには

<script type="text/babel" src="/js/reactcomponents/table.js"></script> 
<div id="loadboardContainer"> 
<div class="table-desc">Future Loads</div> 
<div id="futureLoadsContainer"></div> 

<div class="table-desc">Todays Loads</div> 
<div id ="todaysLoadsContainer"></div> 

<div class="table-desc">Active Loads</div> 
<div id ="activeLoadsContainer"></div> 
</div> 
<script> 
var futureContainer = document.getElementById('futureLoadsContainer'); 
var todaysContainer = document.getElementById('todaysLoadsContainer'); 
var activeContainer = document.getElementById('activeLoadsContainer'); 

ReactDOM.render(<Table source="/reactloadboard/react/getFutureTableValues.php" />, futureContainer); 
ReactDOM.render(<Table source="/reactloadboard/react/getTodaysTableValues.php" />, todaysContainer); 
ReactDOM.render(<Table source="/reactloadboard/react/getActiveTableValues.php" />, activeContainer); 
</script> 
+0

エクスポートは定義されていません。 –

0

ありリアクトとコンポーネントの再利用可能なを作るいくつかの方法がありますが、あなたは最近、ここでいくつかのことを学び始めたので、あなたが行くことができます。

  1. は、ブラウザではなく実際の反応アプリに傾いているのが好きですが、その理由は何ですか?あなたが書いたコードはes5コードであり、ES6でもっとクリーンで再利用可能なコードを書くことができます。

  2. ボイラプレートの使用を開始するため、最初にウェブパックやその他の複雑なものに没頭する必要はありません。

  3. あなたがwebpackとして使用すると、再利用性の点になります。これは、すべてのコードを1つのjsファイルに統合します。

今、別のjsファイルを使用する方法についてあなたのコード

チェックこの1、およそ https://facebook.github.io/react/docs/getting-started.html

それは情報の一つの重要な部分

注意を持っているいくつかのブラウザ(クローム、例えば、HTTP経由で配信されない限り、別ファイル をロードすることはできません。

関連する問題