Я новичок в react js, и у меня есть один вопрос об элементах DOM. У меня есть таблица в моем компоненте. При наведении указателя мыши я хочу выделить соответствующую ячейку и строку. Я хочу получить координаты этого элемента. Например, при наведении курсора на 3-ю ячейку 4-й строки я хочу получить результат как { r-4, c-3 }. Я не хочу использовать jquery для поиска позиции строк. Как я могу достичь такого результата?
Проблема в том, что мне нужно отправить на сервер координаты.
Похоже, вам просто нужен обработчик onmouseover, который куда-то передает координаты. Где у тебя проблемы? Вы можете показать код?
добавьте свой код в скрипт, код или песочницу кода
вы можете использовать чистый js в componentDidMount
@samankhademi вот ссылка на jsfiddle jsfiddle.net/Boris996/cwrs9L8t/3
В чем проблема с отрицательными голосами? )



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


На самом деле, response не работает с DOM, он отображает сам DOM, поэтому jquery не может вам помочь, если вы хотите делать такие вещи, я предлагаю вам больше узнать о реакции Ссылки, вы можете справиться с этим, используя ref и onclicks, надеюсь, это поможет вам.
вы можете добавить собственный код js в componentDidMount и использовать e.target.cellIndex для td и e.target.rowIndex для row
const tds = window.document.getElementsByTagName("td");
for(var i = 0; i<= tds.length -1;i++){
tds[i].addEventListener("mouseup", e => {
console.info(`cell ${e.target.cellIndex +1}` , `Row : ${e.target.parentElement.rowIndex + 1}`);
})
}
живая демонстрация в реакции на коде: https://codepen.io/anon/pen/oJdjJW?editors=1010
надеюсь, я смогу помочь тебе
хорошо, если это был ваш ответ, пожалуйста, нажмите галочку рядом с этим ответом, чтобы сделать его основным ответом на вопрос :)
вы не должны трогать DOM самостоятельно, это убьет цель реакции
вместо этого ваши слушатели событий должны быть выражены в вашем компоненте, и реагирование будет обрабатывать их
внутри это означает, что реакция будет вызывать addEventListener и removeEventListener, когда это необходимо, среди других полезных опций.
сначала ваши данные должны быть структурированы как вложенный массив а затем нанесите на карту свои строки и ячейки
благодаря мощности Array.prototype.map у вас будет доступ к индексам строк и ячеек
rows.map((row, rowIndex) => (
<div>
{row.map((cell, cellIndex) => (
<div
onClick = {() => {
console.info(`you clicked on ${rowIndex}, ${cellIndex}`)
}}
>
{cell}
</div>
))}
</div>
))
вот рабочий пример в codeandbox https://codesandbox.io/s/6zw42m4pxw
Спасибо за внимание. На мой взгляд, ваш пример мне поможет. Я не мог голосовать
Вы можете добиться этого с помощью комбинации onMouseOver, setState и динамического стиля:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
x: null,
y: null
}
}
render() {
return (
<div>
<p>User is hovering over ({this.state.x}, {this.state.y})</p>
<table>
{(new Array(10)).fill().map((_, y) => (
<tr>
{(new Array(10).fill().map((_, x) => (
<td
onMouseEnter = {() => this.setState({x,y})}
style = {{backgroundColor: (this.state.x==x || this.state.y==y) ? 'red' : 'grey'}}
></td>
)))}
</tr>
))}
</table>
</div>
)
}
}
ReactDOM.render((<App/>), document.querySelector('#root'));table {
border-collapse: 'collapse'
}
td {
padding: 1em
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id = "root"></div>Спасибо. Это помогло. могу ли я написать код для выделения определенных элементов на основе этой логики. Например, при наведении курсора на координаты (3,4) не выделяется вся строка или ячейка. Вместо этого выделите только (3,4), (3,3), (3,2). заранее спасибо
Вы можете выделить текущую строку и ячейку, используя только CSS; координаты определять не нужно. Если они вам действительно нужны, просто добавляйте слушателя
hoverк каждой ячейке по мере их создания.