React
コンポーネントのtable
にデータをロードしています。私はmaterialize CSS framework
からテーブルを使用してデータを表示しています。私はテーブルのデータを見ることができます。私はW3school.comのtable sort function
を使用しています。 header
をクリックしてsortTable function
に電話するとすぐに、私はTypeError: Table is null
というエラーメッセージが表示されます。エラーを生成する行はrows = table.getElementsByTagName('TR');
です。私はテーブルのデータを見ることができますが、なぜこのエラーが出るのか理解できません。私のコードは次のようになります。テーブルのデータを見ることはできますが、なぜ `table is null`というエラーが表示されるのですか?
import React, { Component } from 'react';
class newsList extends Component {
constructor(props) {
super(props)
window.info = [];
}
render() {
this.props.arr.result ? window.info.push(this.props.arr.result) : null
var result = window.info.map(item => (
<tbody key={item.id}>
<tr>
<td>{item.profileInfo.profileName}</td>
<td>{item.rows[0][0]}</td>
<td>{item.rows[0][1]}</td>
<td>{item.rows[0][2]}</td>
<td>
<a href="#!" className="secondary-content">
<i className="material-icons">
send
</i>
</a>
</td>
</tr>
</tbody>))
//Sort function starts here.
const sortTable = (n) => {
console.log(window.info);
var table, rows, switching, i, x, y, shouldSwitch, dir, switchCount = 0;
table = document.getElementById('#dataTable');
console.log(table);
switching = true;
//Sort the sorting direction to ascending:
dir = 'asc';
//Make a loop that will continue until no switching has been done:
while (switching) {
//Start by saying: no switching is done:
switching = false;
rows = table.getElementsByTagName('TR');
//Loop through all table rows except the headers:
for (i = 1; i < (rows.length - 1); i++) {
//Start by saying there should be no switching:
shouldSwitch = false;
//Compare the two elements:
x = rows[i].getElementsByTagName('TD')[n];
y = rows[i].getElementsByTagName('TD')[n];
//Switch the rows:
if (dir === 'asc') {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
} else if (dir === 'desc') {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
//If a switch has been done marked, make the switch and mark that a switch has been done:
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
//Each time a switch is done, increase this count by 1:
switchCount++;
} else {
//If no Switching has been done AND the direction is 'asc' set the direction to 'desc' and run the while loop again.
if (switchCount === 0 && dir === 'asc') {
dir = 'desc';
switching = true;
}
}
}
}
return (
<div>
<table id="dataTable" className="responsive-table">
<thead>
<tr>
<th onClick={() => sortTable(0)}>Account Name</th>
<th>Sessions</th>
<th>Bounces</th>
<th>Users</th>
</tr>
</thead>
{result}
</table>
</div>
)
}
}
export default newsList;
'document.getElementId'はIDを探していることを示すために'# '記号を必要としないので、あなたが使っているメソッドのために既にそれを知っています。 'document.getElementById( 'dataTable')'のために。つまり、ReactとDOM操作を混在させるのは恐ろしい考えです。 – Icepickle
@Icepickleはい、それはひどい考えですが、私はReactのドキュメントから 'setState'を理解するのが難しく、別の方法は知らないです。 – Parth
それからあなたは本当に基礎に戻って、ここでやっていることがあなたに将来の頭痛を与えるでしょう。あなたが必要とするテーブルを並べ替えるだけの大きな問題ではない場合は、ここで一緒にハッキングしているものを続行しないでください – Icepickle