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

Компоненты и пропсы

08.11.2020, 16:44. Показов 2758. Ответов 28
Метки нет (Все метки)

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

У меня есть массив с названиями животных, это выводится на экран с помощью картинок, я могу отсортировать массив картинок по группам животных - это работает, у меня один стэйт для этого создан. Теперь мне надо чтобы при клике на картинку - картинка менялась на текст описание животного. Говорят что это надо делать с помощью нового стейта и компонентов, наверное и пропсы надо использовать, я пока этого не понимаю. Может кто-нибудь знает как это можно сделать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.11.2020, 16:44
Ответы с готовыми решениями:

Не могу передать в пропсы состояние из хука
Передаю по клику индекс элемента в редьюсер, меняю в массиве состояние по индексу(true, false) и возвращаю массив состояний, нужно ли еще...

Напишите рекурсивную подпрограмму, выводящую компоненты вектора и суммирующую соответствующие компоненты
Даны описания: tupe Vector=array of integer; Напишите рекурсивную подпрограмму,которая: a)выводит на экран компоненты вектора ...

В один файл вывести нулевые компоненты, в другой - четные компоненты исходного
Дано 3 текстовых файла. В 1-файле есть случайние числа. Во второй файл вывести нулевые компоненты первого файла. А в 3-файл вывести четные...

28
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 19:11  [ТС]
Студворк — интернет-сервис помощи студентам
import './TestComponent'; - эту строку я удалил, заметил что ошибка потом. При загрузке у меня загрузилось только то что из App, а из TestComponent ничего не вывелось на экран.

Добавлено через 9 минут
import './TestComponent'; - это я удалил, заметил что ошибка потом. При выводе у меня показывает только содержимое из первого файла, а из второго нет.

Добавлено через 4 минуты
То есть первый счетчик с кнопкой +100 выводится из первого файла, а второй счетчик с кнопкой +200 не выводится из второго файла. Я как бы импортировал второй счетчик в первый файл и хочу чтобы оба счетчика выводились на странице, но пока выводится только первый из первого файла.
0
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 19:15  [ТС]
Скриншоты:
Миниатюры
Компоненты и пропсы   Компоненты и пропсы  
0
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 19:16  [ТС]
Только у меня почему-то хук в обоих файлах с одним названием, он во втором файле вообще не нужен?
0
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 19:28  [ТС]
А вот, сейчас работает, надо было просто в return вставить этот компонент. Я так понимаю что в разных файлах могут быть одинаковые названия хуков, а в одном и том же не могут быть
Миниатюры
Компоненты и пропсы  
0
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 19:33  [ТС]
Сейчас бы тоже самое сделать но с пропсами, чтобы разобраться что это такое, ну или что-то добавить в эти два файла, чтобы была необходимость для пропсов. Что посоветуете добавить?
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
09.11.2020, 19:48
Лучший ответ Сообщение было отмечено ynxarmed как решение

Решение

ynxarmed, Вот пример накидал, попробуйте.
Кликните здесь для просмотра всего текста
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
97
98
99
100
101
102
103
104
105
106
const Animal = (props) => {
  const [state, setState] = React.useState(false);
 
  const onInfoToggle = React.useCallback(() => {
    setState(!state);
  }, [state]);
 
  return (
    <div className="animal-container">
      <h4 className="animal-container__name">{props.animal.name}</h4>
      <AnimalDescription
        isToggled={state}
        animalImg={props.animal.img}
        description={props.animal.description}
        name={props.animal.name}
        onClick={onInfoToggle}
      />
    </div>
  );
};
 
const AnimalDescription = (props) => {
  if (props.isToggled) {
    return (
      <div className="animal-container__description" onClick={props.onClick}>
        <p> {props.description} </p>
      </div>
    );
  } else {
    return (
      <div className="animal-container__description" onClick={props.onClick}>
        <img src={props.animalImg} alt={props.name} />
      </div>
    );
  }
};
 
function filterAnimals(items, filterType) {
  if (filterType !== "") {
    return items.filter((x) => x.type === filterType);
  } else {
    return items;
  }
}
 
const Animals = (props) => {
  const [state, setState] = React.useState({
    items: [...props.animals],
    filteredItems: [...props.animals],
    currentFilter: "",
  });
 
  const onTypeChange = React.useCallback(
    (type) => {
      const filtered = filterAnimals(state.items, type);
  
      setState({
        ...state,
        filteredItems: filtered,
        currentFilter: type
      });
    },
    [state]
  );
 
  return (
    <section className="animals">
      <div className="animals__filters">
        <button className={state.currentFilter === "" ? "active" : null} onClick={() => onTypeChange("")}>All</button>
        <button className={state.currentFilter === "Dog" ? "active" : null}  onClick={() => onTypeChange("Dog")}>Dogs</button>
        <button className={state.currentFilter === "Cat" ? "active" : null}  onClick={() => onTypeChange("Cat")}>Cats</button>
        <button className={state.currentFilter === "Pig" ? "active" : null}  onClick={() => onTypeChange("Pig")}>Pigs</button>
      </div>
      {state.filteredItems.map(animal => {
        return (<Animal animal={animal} />);
      }
        
      )}
    </section>
  );
};
 
const App = () => {
  const animals = [
    { id: 1, name: "Dog1", type: "Dog", description: "Lucky dog" },
    { id: 2, name: "Dog2", type: "Dog", description: "Dog with mask" },
    { id: 3, name: "Dog3", type: "Dog", description: "Nice dog" },
    { id: 4, name: "Cat1", type: "Cat", description: "A lot of cats" },
    { id: 5, name: "Cat2", type: "Cat", description: "Sly cat" },
    { id: 6, name: "Cat1", type: "Cat", description: "Shy cat" },
    { id: 7, name: "Pig1", type: "Pig", description: "Funny pig" },
    { id: 8, name: "Pig2", type: "Pig", description: "Evil pig" },
    { id: 9, name: "Pig3", type: "Pig", description: "Angry pig" }
  ].map((animal) => ({
    ...animal,
    img: "https://picsum.photos/320/104?png"
  }));
 
  return (
    <div>
      <Animals animals={animals} />
    </div>
  );
};
 
ReactDOM.render(<App />, document.getElementById("root"));
CSS
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
body {
  margin: 1.5em;
}
 
.animals {
  &__filters {
    margin-bottom: 1.5em;
 
    & > button {
      background-color: #008CBA;
      border: none;
      color: white;
      padding: 15px 32px;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      font-size: 16px;
      margin: 4px 2px;
      cursor: pointer;
 
      &:not(:last-child) {
        margin-right: 0.5em;
      }
      
      &.active {
        background-color: #4CAF50;
      }
    }
  }
}
 
.animal-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 20em;
 
  border: 1px solid rgba(0, 0, 0, 0.25);
  padding: 1em;
  margin-bottom: 0.5em;
 
  & > *:not(:last-child) {
    margin-bottom: 1em;
  }
  &__name {
    margin: 0 auto;
  }
  &__description {
    height: 6.5em;
    width: 20em;
    border: 1px solid black;
 
    & img {
      user-select: none;
    }
 
    & p {
    }
  }
}


Добавлено через 2 минуты
Цитата Сообщение от ynxarmed Посмотреть сообщение
Скриншоты
На скриншоте у вас ошибка в App. Все, что возвращает компонент должно быть обернуто в 1 dom элемент. У вас в данном случае возвращается следующее <div> ... </div> <TestComponent />

Цитата Сообщение от ynxarmed Посмотреть сообщение
Только у меня почему-то хук в обоих файлах с одним названием
Это нормально, потому что хук - функция и вы ее вызываете.

Цитата Сообщение от ynxarmed Посмотреть сообщение
Я так понимаю что в разных файлах могут быть одинаковые названия хуков, а в одном и том же не могут быть
Нет, в одном компоненте можно использовать сколько угодно хуков, но они должны быть описаны в начале файла все. Хуки регистрируются по номеру вызова.

Цитата Сообщение от ynxarmed Посмотреть сообщение
Что посоветуете добавить?
Пропсы)
Посмотрите пример выше, должно стать понятнее
1
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 20:28  [ТС]
Мне все еще не дает покоя одна функция с прошлой программы, какую функцию здесь прописать, чтобы при клике значение chanche менялось на false и наоборот на true?
Миниатюры
Компоненты и пропсы  
0
17 / 3 / 0
Регистрация: 21.08.2010
Сообщений: 230
09.11.2020, 20:47  [ТС]
Пример у Вас супер конечно! Буду смотреть разбираться, спасибо!
Вы сделали всё одним файлом JS.

Добавлено через 6 минут
У Вас какой стаж разработки на React, ну и вообще на JS/TS?

Добавлено через 11 минут
Ну для меня это еще пока сложноватый код.
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
09.11.2020, 20:50
Цитата Сообщение от ynxarmed Посмотреть сообщение
Мне все еще не дает покоя одна функция с прошлой программы
Так как этот флаг не относится к вашей модели данных, то не стоит его там хранить. Используйте состояние компонента.

Цитата Сообщение от ynxarmed Посмотреть сообщение
Вы сделали всё одним файлом JS.
Условность песочницы, в которой делал. Но вы можете разнести на файлы и импортировать просто

Не по теме:

Цитата Сообщение от ynxarmed Посмотреть сообщение
стаж разработки на React
В сумме меньше года, была необходимость бизнеса - в ускоренном темпе окунулись в react и описали решение. Но это было давно и забылось, сейчас постепенно вспоминается через написания компонентов :scratch:



Добавлено через 1 минуту
Цитата Сообщение от ynxarmed Посмотреть сообщение
Ну для меня это еще пока сложноватый код.
Посмотрите документацию React и интернет. А если так и не поймете - пишите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.11.2020, 20:50
Помогаю со студенческими работами здесь

Исключить из файла вещественных чисел компоненты, которые меньше предшествующей компоненты
Составить программы, с помощью которых: - сформировать файл из вещественных чисел, которые должны быть введены с клавиатуры; -...

Файлы: исключить из файла компоненты, которые меньше предшествующей компоненты
Составить программы, с помощью которых: _сформировать файл из вещественных чисел, кот должны быть введены с клавиатуры _исключить из...

Найти произведение квадратов предпоследней компоненты файла и компоненты с номером k
1)создаите фаил f компанентами которого являются целые числа. Признаком конца последовательности является число 10. Вывести содержимое...

Добавить компоненты за компонентами; удалить первые компоненты, вторые встанут на его место и т.д
Всем Hi 8-) Есть ScrollBox, на нём расположены компоненты, скажем в ряд. Есть две кнопки, Добавить и Удалить. При нажатии на кнопку...

Записать в файл H сначала компоненты файла F, затем компоненты файлы G с сохранением порядка
Даны txt файлы F и G.Записать в файл H сначала компоненты файла F,затем компоненты файлы G с сохранением порядка:) Помогите пожалуйста


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru