SetState вызывается каждый раз, когда я что-то ввожу

поэтому я сталкиваюсь с проблемой, когда всякий раз, когда я пишу что-то на входе, вызывается handleCommentAdded, который вызывает setState, повторно отображая все. Это делает все, что напечатано или было введено на входе, отображается как комментарии, и я хочу, чтобы то, что находится на входе, когда я нажимаю кнопку «Отправить», отображалось как комментарий. Как я могу это исправить?

 class WriteComments extends React.Component {
      constructor(props) {
         super(props);
         this.state = {
         commentAdded:"",
       }
      this.handleButton = this.handleButton.bind(this);
      this.handleCommentAdded = this.handleCommentAdded.bind(this);
  }

  handleCommentAdded(event) {
    this.setState({newComment: event.target.value});
  }

  handleButton() {
    return(
       <div>
       {comment}
       </div>
   )
 }


render() {
  return(
<div>
 <input type = "text" value = {this.state.commentAdded} onChange=  
   {this.handleCommentAdded}/>

 <div className = "button">
    <button
        type = "button"
        onClick = {e => this.handleButton(e)}
     >
     Write
    </button>
  </div>

) } }

Пожалуйста, проверьте свое состояние, которое вы пытаетесь установить для нового комментария, и вы не определяете внутри конструктора, пожалуйста, сделайте одно состояние для каждого whare, такого как конструктор текстового поля и setstate, это также будет работать.

Sanat Gupta 30.05.2019 06:04

Привет, jennelisajane, я только что отправил ответ, который мог бы лучше объяснить, чего вы пытаетесь достичь. Дайте мне знать, если это работает для вас. Я также напишу несколько комментариев для вас в песочнице.

Chris Ngo 30.05.2019 06:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
298
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ошибка звонит handleCommentAdded в onChange
установить состояние в handleButton

class WriteComments extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      commentAdded: ""
    };
    this.inputRef = React.createRef();
    this.handleButton = this.handleButton.bind(this);
  }

  handleButton() {
    this.setState({ commentAdded: this.inputRef.current.value });
  }

  render() {
    return (
      <div>
        <input type = "text" ref = {this.inputRef} />

        <div className = "button">
          {this.state.commentAdded !== "" ? (
            <div>{this.state.commentAdded}</div>
          ) : (
            <button type = "button" onClick = {e => this.handleButton(e)}>
              Write
            </button>
          )}
        </div>
      </div>
    );
  }
}



ReactDOM.render(<WriteComments />, 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' />

привет, так что мне делать, если мне нужно сделать что-то важное после выполнения this.setstate(commentadded) в handleButton()? Я добавил некоторый код в handlebutton после части состояния настройки, и эта часть не вызывается, потому что this.setstate перерисовывается, и мне нужно снова отправить что-то, чтобы вызвать handleButton

jennielisajane 30.05.2019 06:27

Я создал демонстрацию, в которой значение текстового поля можно получить нажатием кнопки. Компонент будет отображаться каждый раз, когда вызывается setState. Надеюсь, это поможет вам!

class App extends React.Component{
  state  = { inputValue:"" };
  
  render(){
    return(
      <div>
        <input type = "text" value = {this.state.inputValue} onChange = {this.handleChangeEvent} />
        <button onClick = {this.handleSubmit}>Submit</button>
      </div>
    );
  }
  
  handleChangeEvent=(e)=>{
   this.setState({ inputValue: e.target.value });
  }
  
  handleSubmit=()=>{
    console.info("inputValue::", this.state.inputValue);
  }
}

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>

Другие вопросы по теме