2015-11-13 10 views
0

Я использую таблицу Facebook неподвижных данных от: https://github.com/facebook/fixed-data-tableПреобразование ReactClass в ReactComponent ES6

Так что я пытаюсь преобразовать компонент ReactCreateClass к React компонентов с использованием ES6, здесь в React Класс:

<link rel="stylesheet" type="text/css" href="dist/fixed-data-table.css" /> 
<script src="dist/fixed-data-table.js"></script> 
<script type="text/jsx"> 

var Column = FixedDataTable.Column; 
var Table = FixedDataTable.Table; 
var Cell = FixedDataTable.Cell; 


var FilterExample = React.createClass({ 
    render() { 
    return (
     <Table 
    rowHeight={50} 
    rowsCount={1} 
    width={5000} 
    height={5000} 
    headerHeight={50}> 
    <Column 
     header={<Cell>Col 1</Cell>} 
     cell={<Cell>Column 1 static content</Cell>} 
     width={2000} 
    /> 
    <Column 
     header={<Cell>Col 2</Cell>} 
     cell={<Cell>Column 2 static content</Cell>} 
     width={2000} 
    /> 
    </Table> 
    ); 
    }, 
}); 

ReactDOM.render(
    <FilterExample />, 
    document.getElementById('react') 
); 

</script> 

И вот результат использования React ES6:

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import {Table, Column, Cell} from 'fixed-data-table'; 

var rows = [ 
    ['a1', 'b1', 'c1'], 
    ['a2', 'b2', 'c2'], 
    ['a3', 'b3', 'c3'] 
]; 

class DataTable extends React.Component{ 



    // Get initial state from stores 
    constructor(props) { 
    super(props); 
    console.log("Datatable constructor"); 
    this.rowGetter = this.rowGetter.bind(this); 
    } 

    rowGetter(rowIndex) { 
    return rows[rowIndex]; 
    } 

    render() { 
    return (
     <Table 
     rowHeight={50} 
     rowsCount={rows.length} 
     rowGetter={this.rowGetter} 
     width={100} 
     height={250} 
     headerHeight={50}> 
     <Column 
      label="Col 1" 
      width={300} 
      dataKey={0} 
      /> 
     <Column 
      label="Col 2 " 
      width={40} 
      dataKey={1} 
      /> 
     <Column 
      label="Col 3" 
      width={30} 
      dataKey={2} 
      /> 

     </Table> 
    ); 
    } 
} 

export default DataTable; 

Это работает нормально, но я не понимаю, почему мне нужно добавить rowGetter м ethod и атрибут в компоненте React ES6 с методом связывания. Если мне нужно преобразовать другой компонент React из facebook или другого в ES6, он будет очень длинным и беспорядочным. Почему я не могу просто скопировать и вставить метод визуализации из ReactClass в компонент React в ES6?

+0

Что вы хотите сказать? Что вам нужно привязать обратные вызовы к 'this' (например, для всех вызовов событий из другого контекста в JS) или что для какой-то причины вам нужно иметь подсказку rowGetter, которая не объясняется, а не в первом примере? responseClass делал привязку для вас за кулисами с проприетарным createClass –

+0

Хорошо, если я попытаюсь объяснить это лучше: если я удалю элемент rowGetter и rows в части ES6, он не работает, и я не понимаю, почему мне нужно добавьте эти вещи, потому что в классе React я не использовал rowGetter и строки, и он работает – fandro

+0

Итак, вопрос только в том, почему нужно добавить метод, а не почему вы должны использовать '.bind'? –

ответ

0

Требуется функция rowGetter.

https://facebook.github.io/fixed-data-table/api-table.html

Должно быть, это ошибка в исходном коде ES5, так как эта функция является необходимой опорой для FixedDataTable для того, чтобы заполнить таблицу с данными.

+0

Привет, спасибо за ответ, я также вижу, что rowGetter требуется, но в коде ES5, когда я использую код, который он работает с jsx transpiler импортировал и реагировал 0.14. Возможно, это потому, что ES5 не распознает ошибку броска для требуемого реквизита или что-то еще? – fandro

+0

Вы должны были получить предупреждение в своей консоли о том, чтобы не передавать аргумент требуемой опоре. В это действительно входит плечо версии. В любом случае, вы не получали бы данные в своей таблице в версии es5. – Tom