Как правильно переписать ajax-функции в эквиваленты Reactjs

#ajax #reactjs

#ajax #reactjs

Вопрос:

С помощью приведенного ниже кода функции Ajax / jquery я могу получить определенное количество сообщений пользователя, и все работает нормально.

 var userId='Nancy';

function handleUpdateCount(userId) {
  var count = (mCount[userId] == undefined) ? 1 : mCount[userId]   1;
  mCount[userId] = count;
  $('#'   userId   ' label.mCount').html(count);
  $('#'   userId   ' label.mCount').show();

}
  

ниже показано, как я успешно отображаю результат ajax.

 <label class="mCount"></label>
  

Сейчас я переписываю приведенный выше код ajax / jquery для работы с reactjs. Итак, я реализовал функцию ниже
который отлично работает в React, поскольку я могу предупреждать результат счетчика в методе setState().

 handleUpdateCount = (userId) => {
const {mCount} = this.state;

     var count = mCount[userId] == undefined ? 1 : mCount[userId]   1;
     mCount[userId] = count;


 this.setState({mCount: count});
// alert the result is working
 alert(this.state.mCount);

}
  

В методе render я знал, что могу получить результат согласно

 {this.state.mcount amp;amp; <label>{this.state.mcount}</label> }
  

Вот моя проблема:
Как мне преобразовать эти две оставшиеся строки ajax-кодов в эквиваленты reactjs.

 $('#'   userId   ' label.mCount').html(count);
$('#'   userId   ' label.mCount').show();
  

Нужно ли мне делать что-то вроде приведенного ниже кода в reactjs или что? поскольку userId задействован в двух строках кода выше

 if(userId){

 this.setState({mCount: count});
// alert the result is working
 alert(this.state.mCount);

}
  

Обновленный раздел

Идентификатор пользователя для ajax или reactjs поступает из события нажатия кнопки

В Reactjs у вас будет

 <button
            onClick={() => this.handleUpdateCount(user.userId)}
          >{user.userId}</button>
  

В Ajax это

 usersList  = '<li id="'   user.id   '"  onclick="handleUpdateCount(this, ''   user.id   '')"><a href="javascript:void(0)">'   user.name   '101</a></li>';
  

Вот строка кода css, которая называется

 .mCount { color: #FFF; float: right; border-radius: 12px; border: 1px solid #2E8E12; background: #34BB0C; padding: 2px 6px; }
  

Ниже приведен полный код того, как я записываю функцию ajax в эквиваленты Reactjs

 import React, { Component, Fragment } from "react";
import { render } from "react-dom";


class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],
     mCount: {},
    };

 this.handleUpdateCount = this.handleUpdateCount.bind(this);
  }

  componentDidMount() {

 this.setState({

      data: [
        { userId: "nancy101", name: "Nancy Mooree", info: "Hello from Nancy"},
 { userId: "joy106", name: "Joy Mooree", info: "Hello from Joy"}
      ]
    });


  }



handleUpdateCount = (userId) => {
alert(userId);
const {mCount} = this.state;

     var count = mCount[userId] == undefined ? 1 : mCount[userId]   1;
     mCount[userId] = count;

alert(count);

 this.setState({mssCount: count});
// alert the result is working
// alert(this.state.mssCount);

}





  render() {

    return (

          <div>
{this.state.mssCount}

{this.state.data.map((user, i) => {


if (user.userId !=='' amp;amp; user.name !=='') {

          return (
            <div key={i}>
       <div>   
 {user.userId}: {user.name}

<br /><button
            onClick={() => this.handleUpdateCount(user.userId)}
          >{user.userId}</button>

            </div>
              </div>
          )


  } else {







  }
        })}



          </div>

    );
  }
  

Комментарии:

1. Кажется, что в вашем старом коде у вас есть html-элемент с идентификатором, поэтому вы захватываете и показываете содержимое внутри. В react вам не нужно иметь все эти идентификаторы, просто перебирайте своих пользователей и создавайте, показывайте и элемент на основе доступных пользователей.

2. Спасибо за ваш вклад на данный момент. Пожалуйста, сэр Хамед, не могли бы вы предоставить мне пример кодирования о том, как с этим работать. Все еще пытаюсь сделать это правильно

3. Извините за мой предыдущий ответ. Я думаю, что я неправильно понял ваш вопрос. Я не вижу никакого идентификатора пользователя в вашем старом коде: <label class=»mCount»></label> Я думаю, что здесь я упускаю момент.

4. Пожалуйста, обновите свой вопрос, чтобы пользователи могли видеть вашу структуру DOM.

5. Здравствуйте, сэр Хамед, я обновил свой пост, как вы сказали. Пожалуйста, можете ли вы ознакомиться с обновленным разделом моего сообщения / вопроса. Спасибо

Ответ №1:

Я заявляю вслух, что это лучший способ создать функцию для достижения моей цели. поскольку я работаю с nodejs и socket.Io. Я нашел способ указывать количество пользователей вместе с идентификатором пользователя. Приведенная ниже функция по-прежнему работает идеально для меня. Спасибо

 handleUpdateCount = (userId) => {
alert(userId);
const {mCount} = this.state;

     var count = mCount[userId] == undefined ? 1 : mCount[userId]   1;
     mCount[userId] = count;
 this.setState({mssCount: count});

}