Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 105

Динамическая таблица с select

04.06.2020, 18:04. Показов 2211. Ответов 4

Студворк — интернет-сервис помощи студентам
Есть таблица:
Таблица

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
<table>
{
 showTime && group &&<tr>
 <td>1</td>
 <td>2</td>
 </tr>
}
 <tr>
  <td>1</td>
  <td>2</td>
 </tr>
</table>

Есть select:
Таблица

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
const [group, setGroup] = useState(false);
const  onChangeGroup = e =>{
        setGroup(e.target.value);
        console.log("Группировка: "+group);
        console.log("Target: "+e.target.value);
        groupByDate();
}
 
<select value={group} onChange={onChangeGroup}>
<option value="false">Без группировки</option>
<option value="true">По дате</option>
</select>

Проблема 1 в том, что при выборе значения "По дате", group принимает не true, а false
Проблема 2 в том, что при изменении значения group первый раз (с true на false - должно быть иначе), первая строка не отрисовывается, но при 2, 3, ..., n изменении переменной, строка не появляется, хотя при аналогичном изменении с помощью checkbox всё работает нормально
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2020, 18:04
Ответы с готовыми решениями:

Динамическая таблица
Добрый день! Есть поле RichText вкотром есть такие значения напрмер 1. Петя 2. Маня 3. Вася На форме есть таблица без строк. По...

Динамическая таблица
Добрый день! Не могу разобраться в JavaScrip? помогите, please! Есть таблица html: &lt;form method=&quot;post&quot;...

Динамическая Таблица
Привет, еще вопросик. Имеется формочка, она отображается в dialogbox. На этой формочке кнопка. Пользователь на нее нажимает, появляется...

4
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
05.06.2020, 06:51
Цитата Сообщение от magdake Посмотреть сообщение
Проблема 1 в том, что при выборе значения "По дате", group принимает не true, а false
magdake, читайте документацию, setState выполняется асинхронно. Показывайте код, а не обрывки.
0
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 105
05.06.2020, 11:54  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
Показывайте код, а не обрывки.
Код
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import React from "react";
import {myStatementData} from '../../my-statement-data';
import {useState} from 'react';
 
 
export function Content() {
    const [showDate, setShowDate] = useState(true);
    const [showTime, setShowTime] = useState(true);
    const [showType, setShowType] = useState(true);
    const [showIncome, setShowIncome] = useState(true);
    const [showSpending, setShowSpending] = useState(true);
 
    const onChangeDate = e => {
        setShowDate(e.target.checked);
    }
    const onChangeTime = e => {
        setShowTime(e.target.checked);
    }
    const onChangeType = e => {
        setShowType(e.target.checked);
    }
    const onChangeIncome = e => {
        setShowIncome(e.target.checked);
    }
    const onChangeSpending = e => {
        setShowSpending(e.target.checked);
    }
 
    const formatMonth = (month) => month < 10 ? '0' + month : month;
 
    myStatementData.sort((a,b)=>a.date.localeCompare(b.date));
 
    const [group, setGroup] = useState(false);
    const onChangeGroup = e => {
        setGroup(e.target.value);
        console.log("Группировка: " + group);
        console.log("Target: " + e.target.value);
        groupByDate();
    }
 
    return (
        <div className="App-content">
            <div className="Config-block">
                <div><input type="checkbox" onChange={onChangeDate} title={'Дата'} defaultChecked="checked"/>
                    <label>Дата</label></div>
                <div><input type="checkbox" onChange={onChangeTime} title={'Время'} defaultChecked="checked"/>
                    <label>Время</label></div>
                <div><input type="checkbox" onChange={onChangeType} title={'Тип'} defaultChecked="checked"/>
                    <label>Тип</label></div>
                <div><input type="checkbox" onChange={onChangeIncome} title={'Приход'} defaultChecked="checked"/>
                    <label>Приход</label></div>
                <div><input type="checkbox" onChange={onChangeSpending} title={'Расход'} defaultChecked="checked"/>
                    <label>Расход</label></div>
            </div>
 
            <div className="Grouping-block">
                <label>Группировка</label>
                <select value={group} onChange={ e =>{
                    onChangeGroup(e); groupByDate();
                }}>
                    <option value="false">Без группировки</option>
                    <option value="true">По дате</option>
                </select>
            </div>
 
            <div className="Content-Data">
                <table>
                    <thead>
                    <tr>
                        {showDate && <td>Дата</td>}
                        {showTime && group == false ? <td>Время</td> : ''}
                        {showType && group == false ? <td>Тип</td> : ''}
                        {showIncome && <td>Приход</td>}
                        {showSpending && <td>Расход</td>}
                    </tr>
                    </thead>
                    <tbody>
                    {myStatementData.map(el => {
                        const tableDate = new Date(el.date).getDate() + '.' + formatMonth(new Date(el.date).getMonth() + 1) + '.' + new Date(el.date).getFullYear();
                        const tableTime = new Date(el.date).getHours() + ':' + new Date(el.date).getMinutes() + ':' + new Date(el.date).getSeconds();
                        return (
                            <tr key={el._id}>
                                {showDate && <td> {tableDate} </td>}
                                {showTime && group && <td> {tableTime} </td>}
                                {showType && group && <td> {el.type.toString()} </td>}
                                {showIncome && <td className="Income"> {el.amount > 0 ? el.amount : ''} </td>}
                                {showSpending && <td className="Spending"> {el.amount < 0 ? -el.amount : ''}</td>}
                            </tr>
                        )
                    })}
                    </tbody>
                </table>
            </div>
        </div>
    );
}

Данные вида:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
export const myStatementData = [
    {
        _id: '12ae4f777741d44dc7d732e1',
        date: '2020-05-21T12:50:16',
        type: 'Пополнение',
        amount: 2377.99,
    },
    {
        _id: '12ae5f677f6e31aabbcef86b',
        date: '2021-12-11T12:20:35',
        type: 'Перевод',
        amount: -766.01,
    },
];
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
05.06.2020, 12:25
Лучший ответ Сообщение было отмечено magdake как решение

Решение

magdake, значение select строка, поэтому
JavaScript
1
setGroup(e.target.value == 'true');
1
1 / 1 / 0
Регистрация: 02.05.2015
Сообщений: 105
05.06.2020, 12:25  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
groupByDate()
Функция, которая планировалась, но уже не используется, она пустая, когда код вставлял, не заметил этого
Подправил
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import React from "react";
import {myStatementData} from '../../my-statement-data';
import {useState} from 'react';
 
 
export function Content() {
    const [showDate, setShowDate] = useState(true);
    const [showTime, setShowTime] = useState(true);
    const [showType, setShowType] = useState(true);
    const [showIncome, setShowIncome] = useState(true);
    const [showSpending, setShowSpending] = useState(true);
 
    const onChangeDate = e => {
        setShowDate(e.target.checked);
    }
    const onChangeTime = e => {
        setShowTime(e.target.checked);
    }
    const onChangeType = e => {
        setShowType(e.target.checked);
    }
    const onChangeIncome = e => {
        setShowIncome(e.target.checked);
    }
    const onChangeSpending = e => {
        setShowSpending(e.target.checked);
    }
 
    const formatMonth = (month) => month < 10 ? '0' + month : month;
 
    myStatementData.sort((a,b)=>a.date.localeCompare(b.date));
 
    const [group, setGroup] = useState(false);
    const onChangeGroup = e => {
        setGroup(e.target.value);
        console.log("Группировка: " + group);
        console.log("Target: " + e.target.value);
    }
 
    return (
        <div className="App-content">
            <div className="Config-block">
                <div><input type="checkbox" onChange={onChangeDate} title={'Дата'} defaultChecked="checked"/>
                    <label>Дата</label></div>
                <div><input type="checkbox" onChange={onChangeTime} title={'Время'} defaultChecked="checked"/>
                    <label>Время</label></div>
                <div><input type="checkbox" onChange={onChangeType} title={'Тип'} defaultChecked="checked"/>
                    <label>Тип</label></div>
                <div><input type="checkbox" onChange={onChangeIncome} title={'Приход'} defaultChecked="checked"/>
                    <label>Приход</label></div>
                <div><input type="checkbox" onChange={onChangeSpending} title={'Расход'} defaultChecked="checked"/>
                    <label>Расход</label></div>
            </div>
 
            <div className="Grouping-block">
                <label>Группировка</label>
                <select value={group} onChange={e => onChangeGroup(e)}>
                    <option value="false">Без группировки</option>
                    <option value="true">По дате</option>
                </select>
            </div>
 
            <div className="Content-Data">
                <table>
                    <thead>
                    <tr>
                        {showDate && <td>Дата</td>}
                        {showTime && group == false ? <td>Время</td> : ''}
                        {showType && group == false ? <td>Тип</td> : ''}
                        {showIncome && <td>Приход</td>}
                        {showSpending && <td>Расход</td>}
                    </tr>
                    </thead>
                    <tbody>
                    {myStatementData.map(el => {
                        const tableDate = new Date(el.date).getDate() + '.' + formatMonth(new Date(el.date).getMonth() + 1) + '.' + new Date(el.date).getFullYear();
                        const tableTime = new Date(el.date).getHours() + ':' + new Date(el.date).getMinutes() + ':' + new Date(el.date).getSeconds();
                        return (
                            <tr key={el._id}>
                                {showDate && <td> {tableDate} </td>}
                                {showTime && group && <td> {tableTime} </td>}
                                {showType && group && <td> {el.type.toString()} </td>}
                                {showIncome && <td className="Income"> {el.amount > 0 ? el.amount : ''} </td>}
                                {showSpending && <td className="Spending"> {el.amount < 0 ? -el.amount : ''}</td>}
                            </tr>
                        )
                    })}
                    </tbody>
                </table>
            </div>
        </div>
    );
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2020, 12:25
Помогаю со студенческими работами здесь

Динамическая таблица
Есть два скрипта: Первый &lt;div id=&quot;table_wrapper&quot;&gt; &lt;table id=&quot;my_table&quot;&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; ...

динамическая таблица
необходимо создать таблицу: верхний заголовок и первый левый столбец - номера вершин графа, значения ячеек в каждой строке =1. При этом,...

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

Динамическая таблица
Добрый день! Помогите новичку! В процедуре select-ом выбирается определенное число a :=(от 0 до 24) Меняющееся в зависимости от...

Динамическая таблица
Ребят,дали такое задание: По заполненной экзаменационной ведомости (таблица: фамилия студента – оценка на экзамене) создать сводку...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru