gpt4 book ai didi

css - 如何更改列的 CSS - ReactTable

转载 作者:技术小花猫 更新时间:2023-10-29 10:57:23 26 4
gpt4 key购买 nike

我正在使用 react-table在我的申请中。

我一直在做一件事,即在调整列大小时更改 columnsCSS

目前,当您调整 列时,只有光标 发生变化。我想要的是将 border 添加到 selected column

我也在 SOgoogle 上搜索过这个。但是找不到任何有用的东西。并且在文档中也没有提及此主题。

更新

现在我可以在调整大小时拖动列的同时添加边框。我可以通过添加和删除类来做到这一点。

我为此做了什么:

在 className 的状态下创建了一个 var:

  this.state = {
addBorder: null
}

在我的专栏中传递了这个类名:

     const columns = [{
Header: 'Name',
accessor: 'name', // String-based value accessors!,
headerClassName: this.state.addBorder,
className: this.state.addBorder
}, {
Header: 'Age',
accessor: 'age',
Cell: props => <span className='number'>{2}</span> // Custom cell components!
}, {
id: 'friendName', // Required because our accessor is not a string
Header: 'Friend Name',
accessor: d => d.friend.name // Custom value accessors!
}, {
Header: props => <span>Friend Age</span>, // Custom header components!
accessor: 'friend.age'
}];

return (
<div onMouseUp={this.handleMouseUp}>
<ReactTable
data={data}
columns={columns}
resizable={true}
onResizedChange={(col, e) => {
const column = col[col.length-1];
this.setState({addBorder: column.id})
}} />
</div>
)
}

拖动结束时删除类:

   handleMouseUp (e) {
this.setState({addBorder: null});
}

But I am still not able to add border on hover.

现在,我将在 header Prop 中发送我的自定义 HTML。在我的 HTML 中,我做了一个额外的 div。我把这个 div 移到了右边。悬停在这个 div 上时,我将发出鼠标事件并相应地更改 CSS。

但是标题中负责调整列大小的现有 div 与我的 Div 重叠。

  Header: props => <div className='header-div'> Name <div onMouseOver = {() => {
console.log('mose');
this.setState({className: 'addBorder'});
}} className='hover-div' onMouseOut = {() => {console.log('sdasd');this.setState({className: null});}}> </div></div> ,

最佳答案

From what I understand, you want to add some border when you hover over a column header. If my understanding is correct, you can use :hover pseudo selector over the header class

.hdrCls:hover {
border: 2px solid rgba(0,0,0,0.6) !important;
}

更新:

您可以在由 react-table 公开的 onResizedChange 处理程序中操作状态

onResizedChange={(newResized, event) => {
let resizedCol = newResized.slice(-1)[0].id;
if(this.state.activeCol !== resizedCol) {
this.setState({
activeCol: resizedCol,
resizing: true
})
}
}}

此外,请确保您必须在 mouseup 事件上将 resizing 状态设置为 false。为此,我提出了以下解决方案。

componentDidUpdate(props, state) {
if (this.state.resizing && !state.resizing) {
document.addEventListener('mouseup', this.onMouseUp);
} else if (!this.state.resizing && state.resizing) {
document.removeEventListener('mouseup', this.onMouseUp);
}
}

onMouseUp = (evt) => {
this.setState({
activeCol: '',
resizing: false
});
evt.stopPropagation();
evt.preventDefault();
}

供引用:

const ReactTable = window.ReactTable.default

class App extends React.Component {
constructor(props) {
super(props)
this.state = {
activeCol: '',
resizing: false
}
}

componentDidUpdate(props, state) {
if (this.state.resizing && !state.resizing) {
document.addEventListener('mouseup', this.onMouseUp);
} else if (!this.state.resizing && state.resizing) {
document.removeEventListener('mouseup', this.onMouseUp);
}
}

onMouseUp = (evt) => {
this.setState({
activeCol: '',
resizing: false
});
evt.stopPropagation();
evt.preventDefault();
}

render() {
const data = [{
name:"Mark",
age:24
},
{
name:"Derek",
age:26
}]

const columns = [{
Header: 'Name',
accessor: 'name', // String-based value accessors!,
headerClassName: 'hdrCls',
className: (this.state.activeCol === 'name') && this.state.resizing ? 'borderCellCls' : 'defaultCellCls'
}, {
Header: 'Age',
accessor: 'age',
headerClassName: 'hdrCls',
className: (this.state.activeCol === 'age') && this.state.resizing ? 'borderCellCls' : 'defaultCellCls'
}];

return <ReactTable
data = { data }
columns = { columns }
showPagination= {false}
onResizedChange={(newResized, event) => {
let resizedCol = newResized.slice(-1)[0].id;
if(this.state.activeCol !== resizedCol) {
this.setState({
activeCol: resizedCol,
resizing: true
})
}
}}
/>
}
}

ReactDOM.render( < App / > , document.getElementById("app"))
.hdrCls:hover {
border: 2px solid rgba(0,0,0,0.6) !important;
}


.borderCellCls {
border-right: 2px solid rgba(0,0,0,0.6) !important;
border-left: 2px solid rgba(0,0,0,0.6) !important;
}

.defaultCellCls {
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.7.6/react-table.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.7.6/react-table.css"></link>
<div id="app"></div>

您可以尝试使用 CSS。希望这就是您想要的,希望对您有所帮助。

更新:

我认为您必须使用 CSS 才能实现您的愿望。

.borderCellCls {
border-right: 2px solid rgba(0,0,0,0.6) !important;
border-left: 2px solid rgba(0,0,0,0.6) !important;
}

关于css - 如何更改列的 CSS - ReactTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48822022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com