Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472

Плавное изменение текста столбца таблицы при получении новых значений

25.04.2018, 12:04. Показов 2701. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим есть массив

JavaScript
1
2
3
4
5
6
{
  items: [
    { id: 1, name: 'Apples', price: '$2' },
    { id: 2, name: 'Peaches', price: '$5' }
  ] 
}



Данные грузятьс и выводятся в рендере через map - всё ништяк, но мне нужно что бы компоненте li2 в его дочернем диве с классами val1 и val2 новые значения при следющей загрузке не просто сразу присваивались, а делали это с анимацией - то есть если в блоке val1/val2 новое значение отличается от старого, то нужно чтоб блок плавно скрылся, в нём менялось значение, а после этого он бы плавно появился.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class Li2 extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      name: props.name,
      price: props.price,
    };
  }
 
 
  render() {
      return (
            <li> <div className = 'val1' >{ this.state.name }</div> - <div className = 'val2'>{ this.state.price }</div> </li>
      ); 
  }
}
 
class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      error: null,
      isLoaded: false,
      items: []
    };
  }
 
  componentDidMount() {
    fetch("https://api.example.com/items")
      .then(res => res.json())
      .then(
        (result) => {
          this.setState({
            isLoaded: true,
            items: result.items
          });
        },
        // Note: it's important to handle errors here
        // instead of a catch() block so that we don't swallow
        // exceptions from actual bugs in components.
        (error) => {
          this.setState({
            isLoaded: true,
            error
          });
        }
      )
  }
 
  render() {
    const { error, isLoaded, items } = this.state;
    if (error) {
      return <div>Error: {error.message}</div>;
    } else if (!isLoaded) {
      return <div>Loading...</div>;
    } else {
      return (
        <ul>
          {items.map(item => (
               <Li2 key={item.name}   price = {item.price} ></Li2>
          ))}
        </ul>
      );
    }
  }
}
Добавлено через 16 минут
При втором обращении будет такой массив
JavaScript
1
2
3
4
5
6
{
  items: [
    { id: 1, name: 'Apples', price: '$10' },
    { id: 2, name: 'Peach', price: '$5' }
  ] 
}
То бишь плавно должно изменится имя у 2 товара и цена у 1-го


Пока единственным вариантом я вижу хранит в родитеельском компоненте старый массив данных и новый и в дочерний компонент кидать старые и новые значения, чтоб при сравнении пускать анимации.

п.с и тут ul список, а не таблица, сорян
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2018, 12:04
Ответы с готовыми решениями:

Ограничение значений для столбца множеством значений из другого столбца другой таблицы
Добрый. Не могу нагуглить, допустим есть 2 таблицы: t1 и t2 В t1, допустим, кроме всего прочего есть поле: `name` VARCHAR (250) UNICUE...

Плавное изменение текста и цвета
Есть 2 кнопки, надо чтобы при нажатии на 1 становился зелёный текст &quot;Work&quot;, а на 2 красный &quot;Stoped&quot;. Как цвет и текст изменить я...

Что за технология используется в ВК при получении новых сообщений в комментариях
Попробовал что то найти в сети не нашел(или плохо искал). Иду F12 -&gt; Networks, думал что это вебсокеты, но нет я не нашел ничего, это не...

5
 Аватар для shaman92
36 / 34 / 12
Регистрация: 04.06.2014
Сообщений: 220
27.04.2018, 11:01
Не уверен что это сработает, но почему бы не добавить к Li2 css класс который отвечает за анимацию при отрисовке
JavaScript
1
<Li2 key={item.name}   price = {item.price} className="animate" ></Li2>
То есть он отработает когда компонент добавится в верстку. Когда вы меняете состояние реакт должен перерисовать только те компоненты в которых оно изменилось и анимация отработает только на них.
Если же он будет перерисовывать все компоненты можно попробовать в компонент Li2 добавить
JavaScript
1
2
3
shouldComponentUpdate(nextProps) {
    return this.props.data !== nextProps.data
}
это позволит самому выбрать когда компонент перерисовывать, можно сравнить старые пропсы с новыми
https://reactjs.org/docs/react... nentupdate
0
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
27.04.2018, 15:32
shaman92, сомневаюсь что это поможет - ТСу нужна анимация не только при отрисовке, но и при удалении старого контента. Решение с shouldComponentUpdate скорее всего будет состоять из костылей.

Почему бы не использовать подходящий для этого инструмент, в частности ReactCSSTransitionGroup?
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
27.04.2018, 16:23  [ТС]
msheal, как я понял, оно просто пускает анимацию, а мне надо ловить событие, когда анимация исчезновения завершилась, чтоб менять значение в столбце, а уже после пускать вторую анимацию, чтоб столбец проявился.
0
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
27.04.2018, 17:43
Gvizl, вы не сможете это сделать без костылей или своей реализации hoc.
Если говорить о ReactCSSTransitionGroup, то удаление элемента произойдет после указанного в transitionLeaveTimeout миллисекунд, аккурат после окончания вашей анимации. Сейчас вы можете только запускать анимацию при рендере, но удаляться (ререндериться) он будет моментально
0
8 / 8 / 2
Регистрация: 31.01.2014
Сообщений: 472
28.04.2018, 09:31  [ТС]
msheal, не удалять, скрывать, чисто через opacity чтоб исчезало, при 0 меняло значение, а потом снова появлялось.

Добавлено через 9 минут
То есть как вариант ставить одно время дляя transitionLeaveTimeout и setTimeout, в котором будет смена значения и setstate чтоб блок снова появился?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2018, 09:31
Помогаю со студенческими работами здесь

Изменение цвета кнопки при получении фокуса при переходе по TAB
Здравствуйте! Подскажите пожалуйста: как настроить изменение цвета кнопки при получении фокуса при переходе по ТАВ (т.е. на клавиатуре,...

Съезжание текста при выводе таблицы значений трех функций
Пишу лабораторную работу на Pascal'е. задали написать программу с использованием функций для трех формул, которая выводит таблицу значений...

Ошибка при создании триггера: Имя столбца или число предоставленных значений не соответствует определению таблицы
Есть вот такой код При выполнении выдает ошибку сообщение: 213, уровень: 16, состояние: 1, процедура: trigger_InsteadOfUPDATE, строка: 13...

Изменение поля при получении курсора на textbox
Здравствуйте. Подскажите пожалуйста, как можно при установленном курсоре в textbox1 передать значение LABEL в textbox2 для изменения. ...

Изменение вида кнопки при получении и потере фокуса
Приветик всем. Возник вопросик по поводу кнопок. Хочу вставить нарисованные мною кнопки в проект, причем чтобы когда наводила на кнопку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru