次のような状況があります。配列の配列からレンダリングされたボードを構築しています。キーを押すと、ボードが動く。ボードがかなり大きくなり、あまり変化しないので、私はその位置を変更するたびに再レンダリングしたくありません。 それは可能ですか?divのスタイルを変更したい場合は、REACTでの完全な再レンダリングを防ぐ方法
ありがとうございました。ここで
は、部分的なコードです:あなたが試すことができますどのような
class App extends Component {
constructor(props) {
super(props);
this.state = {
board: this.createEmptyBoard(),
top: 0,
left: 0
}
}
componentWillMount() {
document.addEventListener("keydown", this.handleKeyPress, false);
}
handleKeyPress = (e) => {
switch(e.keyCode) {
case 37:
this.setState({
leftVisible: this.state.left + 10
});
break;
case 39:
this.setState({
leftVisible: this.state.left - 10
});
break;
default:
break;
}
};
render() {
return (
<div className="main">
<div className="view">
<Board board={this.state.board} top={this.state.top} left={this.state.left}/>
</div>
</div>
);
}
}
/* Board Compontent */
class Board extends Component {
render() {
const board = this.props.board;
let boardJSX = [];
for (let i = 0; i < board.length; i++){
let tileJSX = [];
for (let j = 0; j < board[i].length; j++){
tileJSX.push(<div key={"tile-" + i + '-' + j} className={this.classByValue(board[i][j])}></div>);
}
boardJSX.push(<div key={"row-" + i} className="board-row">{tileJSX}</div>
);
}
let move = {
left: this.props.left
};
return (
<div className="board" style={move}>
{boardJSX}
</div>
);
}
}
仮想DOMはかなりスマートです。ほとんどの場合、効率について心配する必要はありません。変更されたノードのみが更新されます。 – stybl
私はそう望んだが、各キープレスでボードを動かすのに1秒かかる。だからここの何かが間違っていて、私はそれがすべてを再レンダリングすると思う。 – Sveta