Javascript 反应-当用户每次单击屏幕上的任何位置时,更改元素文本的最佳方式是什么?

Javascript 反应-当用户每次单击屏幕上的任何位置时,更改元素文本的最佳方式是什么?,javascript,reactjs,jsx,Javascript,Reactjs,Jsx,我已经开始学习React,在阅读了文档之后,我有一个问题 我想做以下工作: 我想将文本作为组件的一部分进行渲染。然后,当用户单击屏幕上的任何位置时,文本会发生变化,然后在第二次单击时再次发生变化,然后在第三次单击时再次发生变化,最后是第四次单击 我想知道在react中执行此操作的最佳实践是什么?我在考虑使用“onClick”方法,但那只允许两种状态 如果能在我的旅途中得到一些帮助,我将不胜感激 const welcome=欢迎使用我的应用程序1/4; ReactDOM.render 欢迎 do

我已经开始学习React,在阅读了文档之后,我有一个问题

我想做以下工作:

我想将文本作为组件的一部分进行渲染。然后,当用户单击屏幕上的任何位置时,文本会发生变化,然后在第二次单击时再次发生变化,然后在第三次单击时再次发生变化,最后是第四次单击

我想知道在react中执行此操作的最佳实践是什么?我在考虑使用“onClick”方法,但那只允许两种状态

如果能在我的旅途中得到一些帮助,我将不胜感激

const welcome=欢迎使用我的应用程序1/4; ReactDOM.render 欢迎 document.getElementById'theapp' ; 学习ReactJS 您可以使用mousedown事件观察屏幕上任何位置的单击,如

class Welcome extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        count: 0,
        message: ["message1", "message2", "message3", "message4"]
      }
    }

    componentDidMount() {
        window.addEventListener('mousedown', this.pageClick.bind(this), false);
    }

    pageClick(e) {
        this.setState((prevState) => {
            if(prevState.count != this.state.message.length - 1)
                return { count: prevState.count + 1};
        });
    }

    render() {
        const { message, count } = this.state;
        return (
            <h1>Welcome to my app {message[count]}</h1>
        )
    }
}

ReactDOM.render(
  <Welcome/>, 
  document.getElementById("app")
);
您还可以使用mouseup和click事件。

您可以使用mousedown事件观察屏幕上任何位置的单击,如

class Welcome extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        count: 0,
        message: ["message1", "message2", "message3", "message4"]
      }
    }

    componentDidMount() {
        window.addEventListener('mousedown', this.pageClick.bind(this), false);
    }

    pageClick(e) {
        this.setState((prevState) => {
            if(prevState.count != this.state.message.length - 1)
                return { count: prevState.count + 1};
        });
    }

    render() {
        const { message, count } = this.state;
        return (
            <h1>Welcome to my app {message[count]}</h1>
        )
    }
}

ReactDOM.render(
  <Welcome/>, 
  document.getElementById("app")
);

您可以使用mouseup并单击事件。

因为您知道您只需要4条消息,所以创建一个包含它们的数组。然后,每次单击更新一个计数器,然后使用该计数器从数组中获取相关项

检查下面的演示

信息更改点击 此代码段有一个计数器/索引和一个数组,其中包含在初始状态下定义的要显示的消息。然后,我们将向h1元素添加一个eventlistener,以便在单击时触发。这样做会增加索引,只要索引不大于2,此时就没有更多的消息可显示

类MyApp扩展了React.Component{ 建造师{ 超级的 此.state={ 信息:[foo,bar,baz,qux], 索引:0 }; this.incrementCounter=this.incrementCounter.bindthis; } 递增计数器{ 如果this.state.index>2返回; this.setStateprevState=>{index:prevState.index+1}; } 渲染{ 返回{this.state.messages[this.state.index]} } } ReactDOM.render、document.getElementByIdapp;
因为你知道你想要4条消息,所以创建一个包含它们的数组。然后,每次单击更新一个计数器,然后使用该计数器从数组中获取相关项

检查下面的演示

信息更改点击 此代码段有一个计数器/索引和一个数组,其中包含在初始状态下定义的要显示的消息。然后,我们将向h1元素添加一个eventlistener,以便在单击时触发。这样做会增加索引,只要索引不大于2,此时就没有更多的消息可显示

类MyApp扩展了React.Component{ 建造师{ 超级的 此.state={ 信息:[foo,bar,baz,qux], 索引:0 }; this.incrementCounter=this.incrementCounter.bindthis; } 递增计数器{ 如果this.state.index>2返回; this.setStateprevState=>{index:prevState.index+1}; } 渲染{ 返回{this.state.messages[this.state.index]} } } ReactDOM.render、document.getElementByIdapp;
您可以将文本放入如下数组:

 const data = ['one', 'two', 'three'];
而不是每次用户单击时,将状态i增加1

import React from 'react';

const data = ['one', 'two', 'three']

class App extends React.Component {
   constructor(props){
    super(props);
      this.state = {
        name: 'hello',
        i : 0
      }
   }
   click(){
       // if it's the last element of array than it will start from 0 index again
       if(data[this.state.i] == undefined){
          this.setState({i : 0})
       }
       setTimeout(function() { this.setState({name: data[this.state.i], i : this.state.i + 1 }); }.bind(this), 50);
       // incrementing counter by 1 everytime user clicks

   }
   render() {

      return (
         <div>
             <div>
               <span>{this.state.name}</span>
               <button onClick={this.click.bind(this)}>Click</button>
             </div>

         </div>
      );
   }
}

export default App;

您可以将文本放入如下数组:

 const data = ['one', 'two', 'three'];
而不是每次用户单击时,将状态i增加1

import React from 'react';

const data = ['one', 'two', 'three']

class App extends React.Component {
   constructor(props){
    super(props);
      this.state = {
        name: 'hello',
        i : 0
      }
   }
   click(){
       // if it's the last element of array than it will start from 0 index again
       if(data[this.state.i] == undefined){
          this.setState({i : 0})
       }
       setTimeout(function() { this.setState({name: data[this.state.i], i : this.state.i + 1 }); }.bind(this), 50);
       // incrementing counter by 1 everytime user clicks

   }
   render() {

      return (
         <div>
             <div>
               <span>{this.state.name}</span>
               <button onClick={this.click.bind(this)}>Click</button>
             </div>

         </div>
      );
   }
}

export default App;

为什么不将计数器保持在该状态并在每次单击时更新它呢。因此,您将有点击次数的跟踪。OnClick将更新您的文本和计数器。感谢Vivek的建议,我将研究如何实现您的想法:为什么不在该州保留一个计数器,并在每次单击时更新它。因此,您将有点击次数的跟踪。OnClick将更新您的文本以及您的计数器。谢谢您的建议Vivek,我将考虑实施您的想法:谢谢您的建议!:谢谢你的建议!:嗨,克里斯,谢谢你的回答!我想这可能很灵活,如果我想在数组中添加/删除消息,那么我只需要确保更新侦听器,以便根据我有多少消息来增加或减少索引。不,如果要从数组中添加/删除消息,请将条件更改为this.state.index>this.state.index.length-2。这样更灵活。谢谢克里斯,谢谢你的帮助。嘿,克里斯,谢谢你的回答!我想这可能很灵活,如果我想在数组中添加/删除消息,那么我只需要确保更新侦听器,以便根据我有多少消息来增加或减少索引。不,如果要从数组中添加/删除消息,请将条件更改为this.state.index>this.state.index.length-2。这样更灵活。谢谢克里斯,谢谢你在这方面的帮助。