Я использую таблицу 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?
Что вы хотите сказать? Что вам нужно привязать обратные вызовы к 'this' (например, для всех вызовов событий из другого контекста в JS) или что для какой-то причины вам нужно иметь подсказку rowGetter, которая не объясняется, а не в первом примере? responseClass делал привязку для вас за кулисами с проприетарным createClass –
Хорошо, если я попытаюсь объяснить это лучше: если я удалю элемент rowGetter и rows в части ES6, он не работает, и я не понимаю, почему мне нужно добавьте эти вещи, потому что в классе React я не использовал rowGetter и строки, и он работает – fandro
Итак, вопрос только в том, почему нужно добавить метод, а не почему вы должны использовать '.bind'? –