第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在多個(gè)狀態(tài)更改中的每一個(gè)上重新渲染組件?

如何在多個(gè)狀態(tài)更改中的每一個(gè)上重新渲染組件?

吃雞游戲 2023-05-25 16:16:10
我還在學(xué)習(xí) JS/React,所以很可能我做的完全錯(cuò)了。歡迎任何批評(píng)。我有一個(gè)畫布,上面有一幅畫。我想在按下按鈕時(shí)多次更改繪圖的顏色。要清楚:我想單擊按鈕多次更改繪圖的顏色。我試過用幾種不同的方式來做這件事,但它們主要是兩種方式的變體:當(dāng)按鈕被按下時(shí),它會(huì)調(diào)用多次更改狀態(tài)的方法,但 React 只會(huì)費(fèi)心渲染我設(shè)置的最后一個(gè)狀態(tài)。(這是有道理的)使用setTimeoutfor each setState,但它似乎破壞了方法,并且渲染永遠(yuǎn)不會(huì)改變。這是一個(gè)示例代碼:import React from 'react';class App extends React.Component { constructor(props) {      super(props);      this.state = {        color: "#000000",      }      this.changeColors = this.changeColors.bind(this);  }    changeColors() {    let colors = ["#000000", "#0000FF", "#FF0000", "#00FF00"];    for (let nextColor in colors) {      console.log(`Color now ${colors[nextColor]}`);      // This seems to break it      //setTimeout(function(){ this.setState({color: colors[nextColor]}); }, 3000);      // This only renders last state      this.setState({color: colors[nextColor]});    }  }  render() {    return (      <div className="App">        <h1>Change Colors</h1>        <MyButton changeColor={this.changeColors}/>        <MyCanvas color={this.state}/>      </div>    );  }}class MyButton extends React.Component {  render() {    return (      <button         type="button"         className="btn btn-secondary"         onClick={() => this.props.changeColor()}>        Color      </button>    );  }}class MyCanvas extends React.Component {  componentDidMount() {      this.drawOnCanvas(this.props.color)  }    componentDidUpdate() {      this.drawOnCanvas(this.props.color)  }    drawOnCanvas(color) {    const ctx = this.refs.canvas.getContext('2d');    ctx.clearRect(0, 0, 300, 300)     ctx.fillStyle=color.color;    ctx.fillRect(10, 10, 100, 100);  }    render() {    return (      <canvas id="canvas" ref="canvas" width={300} height={300}/>    );  }}export default App;我做錯(cuò)了什么以及如何通過反應(yīng)實(shí)現(xiàn)多種顏色變化?
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果沒有setTimeout所有的渲染將基本上合并為一個(gè),這就是 React 的工作方式。但是,您可以嘗試setTimeout使用動(dòng)態(tài)超時(shí)。


class App extends React.Component {

 constructor(props) {

      super(props);

      this.state = {

        color: "#000000",

      }

  }

  

  changeColors = () => {

    let colors = ["#000000", "#0000FF", "#FF0000", "#00FF00"];

    colors.forEach((color, i) => {

      setTimeout(() => {

          this.setState({ color });

      }, 500 * i);

    });

  }


  render() {

    return (

      <div className="App" style={{ color: this.state.color }}>

        <h1>Change Colors</h1>

        <button onClick={this.changeColors}>change</button>

      </div>

    );

  }

}


ReactDOM.render(<App />, document.getElementById('root'));

<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>


查看完整回答
反對(duì) 回復(fù) 2023-05-25
  • 1 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)