it-swarm.com.ru

ReactJS + Material-UI: Как уменьшить ширину столбца Material-UI в <TableRow />?

В настоящее время я использую ReactJS + Material-UI, а с <Table> для Material-UI ширина столбцов автоматически устанавливается в зависимости от содержимого. В настоящее время кажется, что все столбцы имеют одинаковую ширину, но я хочу, чтобы некоторые столбцы занимали большую ширину, чем другие.

Так есть ли способ произвольно назначить ширину столбца <TableRow> и при этом оставаться динамическим, основываясь на контенте?

7
user2426823

Вы можете установить стиль TableHeaderColumn и его соответствующих TableRowColumns. Ниже я установил ширину 12 пикселей (а цвет фона - желтый только для дальнейшей демонстрации пользовательских стилей)

работает jsFiddle: https://jsfiddle.net/0zh1yfqt/1/

const {
  Table,
  TableHeader,
  TableHeaderColumn,
  TableBody,
  TableRow,
  TableRowColumn,
  MuiThemeProvider,
  getMuiTheme,
} = MaterialUI;

 class Example extends React.Component {
  render() {
    const customColumnStyle = { width: 12, backgroundColor: 'yellow' };

    return (
      <div>
        <Table>
          <TableHeader>
            <TableRow>
              <TableHeaderColumn>A</TableHeaderColumn>
              <TableHeaderColumn style={customColumnStyle}>B</TableHeaderColumn>
              <TableHeaderColumn>C</TableHeaderColumn>
            </TableRow>            
          </TableHeader>
          <TableBody>
            <TableRow>
              <TableRowColumn>1</TableRowColumn>
              <TableRowColumn style={customColumnStyle}>2</TableRowColumn>
              <TableRowColumn>3</TableRowColumn>
            </TableRow>
            <TableRow>
              <TableRowColumn>4</TableRowColumn>
              <TableRowColumn style={customColumnStyle}>5</TableRowColumn>
              <TableRowColumn>6</TableRowColumn>
            </TableRow>
            <TableRow>
              <TableRowColumn>7</TableRowColumn>
              <TableRowColumn style={customColumnStyle}>8</TableRowColumn>
              <TableRowColumn>9</TableRowColumn>
            </TableRow>
          </TableBody>
        </Table>
      </div>
    );
  }
}

const App = () => (
  <MuiThemeProvider muiTheme={getMuiTheme()}>
    <Example />
  </MuiThemeProvider>
);

ReactDOM.render(
  <App />,
  document.getElementById('container')
);
6
Jeff McCloud

В компоненте <Table> есть скрытая опора, которая заставляет его вести себя как HTML-элемент <table>, то есть адаптировать ширину столбцов к содержимому:

<Table style={{ tableLayout: 'auto' }} fixedHeader={false} ...>
    ...
</Table>

Он не позволяет стилизовать столбцы один за другим, но по крайней мере он менее уродлив, чем большие столбцы для небольшого содержимого по умолчанию.

1
François Zaninotto

согласно ответу @ Франсуа Занинотто @Lane Rettig

... 

и добавив с этим, вы можете получить таблицу прокрутки с бесконечными столбцами ...

componentDidMount() {
    let tbody = $(this.refs.table)
    if (tbody && tbody.length == 1) {
        let div = tbody[0].refs.tableDiv
        div.style.overflowX = 'auto'
        div.parentElement.style.overflowX = 'hidden'
    } else {
        // error handling
    }
}
0
yatusiter