Ответы пользователя по тегу React
  • Простые библиотеки для редактирования JSON в React.js?

    usyninis
    @usyninis
    react-эксперт
    я однажды делал похожий функционал, но не стал искать именно под react, а просто написал свою простенькую обертку (react-компонент), в котором в componentDidMount инициировал библиотеку для работы с json:
    https://github.com/josdejong/jsoneditor

    она гибкая и обладает всем необходимым тебе функционалом
    Ответ написан
    Комментировать
  • Как правильно отрендерить данные на react с разрывом?

    usyninis
    @usyninis
    react-эксперт
    добавляем разделитель по нужному индексу:

    import { Fragment } from 'react'; // подключаем react fragment
    ....
    // перед 3-им индексом, вставляем разделитель, индексы нумеруются от 0
    render() {
      return (
        <div>
          {
            this.props.data.map((item, index) => {
              console.log('item', item);
              return (
                <Fragment key={item.id}>
                  {index === 3 && ( 
                    <div>
                      разделитель
                    </div>
                  )}
                  <div key={item.id}>
                    {item.title}
                    {item.round.map((r) => {
                      console.log('r', r);
                      return (
                        <div key={r.id}>
                          {r.total}
                        </div>
                      )
                    })}
                  </div>
                </Fragment>
              )
            })
          }
        </div>
      )
    }
    Ответ написан
    Комментировать
  • Как плавно удалить блок?

    usyninis
    @usyninis
    react-эксперт
    удаление должно проходить в 2 этапа:

    1. помечаешь удаляемый элемент спец флагом "isDeleted" (в этом состоянии средствами css запускаешь анимацию исчезновения)
    2. по окончании анимации удаляешь элемент из state полностью

    ...
    onDeleteItem(index) {
      const users = this.state.users;
      users[index].isDeteted = true;
      this.setState({
        users,
      });
      setTimeout(() => {
        users.splice(index, 1);
        this.setState({
          users,
        });
      }, 300);
    }
    ...
    {this.state.users.map((user, index) => (
      <UserItem 
        className={user.isDeteted ? 'class-for-deleted' : ''} 
        onDelete={this.onDeleteItem.bind(this, index)} 
      />
    ))}
    ...


    уровень senior: в данном механизме асинхронное изменение state, поэтому для стабильно работающего кода необходимо добавить проверку, что процесс удаления закончился (чтобы не было коллизий между несколькими быстрыми кликами "удалить"), а так же на существование текущего компонента (что он не размонтировался из dom-дерева)
    Ответ написан
    Комментировать