gpt4 book ai didi

javascript - 将 jQuery 单击/拖动代码转换为 React

转载 作者:行者123 更新时间:2023-11-30 00:03:38 25 4
gpt4 key购买 nike

使用以下代码,取自 this SO answer ,用户可以通过单击并拖动在网格中垂直选择单元格。

我打算在 React 中使用此功能,因此需要将其转换为组件。

如何将基于方法链和选​​择器的结构更改为 React?

Working example with jquery

--HTML--

<table cellpadding="0" cellspacing="0" id="our_table">
<tr>
<td data-row="1" data-col="1">a</td>
<td data-row="1" data-col="2">b</td>
<td data-row="1" data-col="3">c</td>
</tr>
<tr>
<td data-row="2" data-col="1">d</td>
<td data-row="2" data-col="2">e</td>
<td data-row="2" data-col="3">f</td>
</tr>
<tr>
<td data-row="3" data-col="1">g</td>
<td data-row="3" data-col="2">h</td>
<td data-row="3" data-col="3">i</td>
</tr>
</table>

--CSS--

table td {
width:100px;
height:100px;
text-align:center;
vertical-align:middle;
background-color:#ccc;
border:1px solid #fff;
}

table td.highlighted {
background-color:#999;
}

--jQuery--

$(function () {
var isMouseDown = false,
isHighlighted;
var currentCol;
$("#our_table td")
.mousedown(function () {
isMouseDown = true;
currentCol = this.getAttribute("data-col");
$(this).toggleClass("highlighted");
isHighlighted = $(this).hasClass("highlighted");
return false; // prevent text selection
})
.mouseover(function () {
if (isMouseDown) {
if(currentCol === this.getAttribute("data-col")){
$(this).toggleClass("highlighted", isHighlighted);
}
}
})
.bind("selectstart", function () {
return false;
})

$(document)
.mouseup(function () {
isMouseDown = false;
});
});

最佳答案

所有你需要的都在React Event System docs中. onMouseDownonMouseUponMouseOver 是您最感兴趣的事件处理程序。我创建了 Similar Example .

componentWillReceiveProps 函数中,我检查单元格是否应该更新它们自己的状态,并且我使用 shouldComponentUpdate 来防止在不需要时渲染组件(当你有很多细胞)。主要状态在 Hello(父)组件中:overId 包含单元格数据,startedId 包含起始单元格和 enableSelect当我们开始选择时是真的。

它“相似”是因为我没有仔细检查您的示例,但我认为它足以向您展示它是如何工作的。

关于javascript - 将 jQuery 单击/拖动代码转换为 React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39336741/

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