GeekHub-2020.js
GeekHub-2020.js copied to clipboard
Домашняя работа №6 - React
Видео: https://youtu.be/nLWwrNC00bg
Основная задача:
Я решил сделать плавный переход от jQuery к React и домашка будет такая - переписываем домашку dom
на реакте.
- Копируем папку
react
- В этой папке запускаем
npm i
. Кстати для того чтобы внутри папкиreact
у меня получилось добавить пакетreact
я использовал опцию-f
(force) вот такnpm i -f --save react
. Вообще я ни разу не сталкивался с ситуацией, что название моего проекта пересекается с названием какого-то npm пакета - После установки запускаем команду
npx webpack serve
- Ваша задача - дописать компонент в
src/Table.js
который, как вы увидите, принимает четыре параметра:-
columns
- число, количество столбцов которое должно быть у таблицы -
rows
- число, количество строк которое должно быть у таблицы -
cell
- строка типаB2
(может отсутствовать), адрес ячейки в которую вставляют данные -
data
- массив (может отсутствовать), вставляемые данные
-
- Компонент
Table
должен возвращать такую же таблицу как и в домашкеdom
с инпутами и если передалиcell
иdata
то начиная с адреса ячейки в инпутах должны быть данные из массива - Прежде чем пушить в гит домашку, выполните команду
npx webpack
которая создаст папкуdist
и все необходимые файлы в ней. Добавьте эту папкуdist
в гит. Бот будет открывать файлreact/dist/index.html
и проверять домашку.
Усложннная задача:
Измените код так, чтобы бот мог вставлять данные в таблицу сколько угодно раз без перезагрузки страницы и данные после предыдущей вставки сохранялись в таблице. Чтобы по факту получилось идентичное поведение тому как сейчас реализована домашка dom
в папке example
.
Дивно. Стосовно 3 пункту (webpack-dev-server) - у мене просить встановити.
@ArtemSlotin ты прав, я лохонулся, у меня webpack-dev-server
был установлен в рутовой папке )) исправил package.json
Добрый день, можно ли в package.json и webpack.config.js добавить свои настройки по мелочи? Бот ругаться не будет?
@kononyukii можно
@redexp я узнал что есть команда npx create-react-app
. почему мы не используем её?
@AndriiVitrenko create-react-app
для тех кто уже знает что как работает и им надоело каждый раз всё настраивать. Вы пока ничего не знаете, лучше всё самим написать, чтобы лучше понимать
@redexp Перевірка буде здійснюватися за файлом ./dist/index.html
?
@Daniel-developer5 да. Сейчас допишу, что нужно эту папку dist
добавить в гит, чтобы боту было меньше работы компилить каждый ваш проект
@redexp то нам нужно выгрузить только папку dist? Или всё вместе с src, json и конфигами?
@AndriiVitrenko всё кроме node_modules
@redexp как мы можем работать со стейтами для изменения текста в инпутах, если декларация компонента у нас в синтаксисе es5? например, в этом задании
export default function Table(props) {
}
@ANScorp Я думаю можна і без стейта обійтись. Але якщо так кортить, то перероби на клас, або пиши на хуках)
@ANScorp компонент Table
отображает то что ты ему передал. Можно сохранять данные в отдельном массиве и на компонент всегда передавать массив с уже слепленными данными
@AndriiVitrenko @SerhiiYahodzynskyi задавать можно только общие вопросы. Вопросы типа "Я написал вот такой код, а он не работает" - запрещены
@redexp ок. просто хочу знать почему не работает цикл for внутри jsx
@AndriiVitrenko почему не работает цикл for внутри jsx намёк понятен?
@redexp по https://github.com/redexp/GeekHub-2020.js/issues/19#issuecomment-736026795 подход абсолютно рабочий и понятный, но, возможно, в некоторых случаях он будет затратным. Допустим, если наша таблица не 26х10 ячеек, а в 10000 раз больше - каждый раз собирать новый массив будет дорогое удовольствие. Возможно, есть еще какой-то подход для обработки подобных данных? Что можно сделать для облегчения жизни компоненту в подобной ситуации?
@ANScorp это не проблема компонента, а того кто придумал показать огромную таблицу данных. Запомните золотое правило - думать об оптимизации в самый последний момент. Сначала строите основную логику, чтобы всё просто работало, а потом можете заняться оптимизированием.
@ANScorp Потім, якщо таблиця в тебе на 1000 комірок, ти можеш показати юзеру 100, а коли він проскролить вправо до кінця, догрузити ще 100 і так до 1000
@redexp по https://github.com/redexp/GeekHub-2020.js/issues/19#issuecomment-736804666 не, ну это понятно 😄 основная логика есть, теперь думаю про оптимизацию. Просто, я сейчас думаю с точки зрения приложения аля гугл таблицы - что мы можем оптимизировать исходя из того, что компонент у нас реактовский и требуется работать с большими объемами данных?
@Daniel-developer5 твое предложение по отрисовке блоками вполне логично, но все равно, насколько я понимаю, изменения, так или иначе, все равно вносятся в единый массив с которым работает наш компонент.
@redexp или в таком случае в нашем компоненте Table
вместо одного массива, мы должны работать с небольшими массивами четко заданого размера? И скорее всего это будут уже не массивы, а объекты для упрощения идентификации ячеек и их содержимого.
@ANScorp Я думаю, що показувати якусь таблицю на 100500 комірок взагалі тупо. Її вже краще розбити на декілька сторінок
JSX теги, які повертають наші компоненти, строго повинні знаходитися в одному батьківському блоці:
import React from 'react'
const Component = () => {
return (
<div>
<span></span>
<span></span>
</div>
)
}
В такому коді буде помилка:
import React from 'react'
const Component = () => {
return (
<span></span>
<span></span>
)
}
Хм... Цікаво, що навіть сам гітхаб починає коряво підствітлювати наш JSX.
Якщо ми не хочемо створювати зайвих блоків, можна використати React.Fragment
:
import React, { Fragment } from 'react'
const Component = () => {
return (
<Fragment>
<span></span>
<span></span>
</Fragment>
)
}
Або ж таку цікаву сущність, як пустий тег:
import React from 'react'
const Component = () => {
return (
<>
<span></span>
<span></span>
</>
)
}
не "пустой тег", а короткая запись, это тот же фрагмент. Можно ещё возвращать массив
function Component() {
return [
<input/>,
<input/>,
];
}
@redexp при проверке будет учитываться возможность добавления/удаления данных через контекстное меню?
@ANScorp нет
@redexp а когда проверка первая будет?
Извините ребята, я не могу выгребсти из своих проблем, очень может быть что я так и не успею сделать бота для этой домашки. Возможно я просто сделаю эту домашку онлайн и вы увидете как её нужно было делать и исключу только тех кто вообще ничего не запостил в гит.
Когда дедлайн текущей домашки?
@mAndrushchenko завжди ранок понеділка, хоча у вівторок теж чомусь перевіряє
@redexp Скажіть будь ласка, зараз хуки витісняють redux? Я тільки недавно його спробував і мені якось більше сподобалася ідея централізованого стейту, ніж локальний через хуки в кожному компоненті. Чи їх можна комбінувати, кароч, як зараз модно, чи правильно писати реакт? Ну класові компоненти то ясно вже відходять на другий план, а от з цим як?
@Daniel-developer5 На одном проекте можно использовать и классы и хуки и редакс). Просто если можно к примеру обойтись только реактом, то зачем редакс? Хотя все равно почти на всех проектах есть редакс и его учить все равно придется.
@AndreyKondakov Ну впринципі згоден. Класи можна використовувати для специфічних методів життєвого циклу, які є тільки у них, хуки можна для невеликих данних типу контролювання елементів, зберігання значення input і тп., а редакс для головного стану та подій, які використовуються в усьому додатку. Але мені ще цікава думка @redexp, якщо можна)
@Daniel-developer5 зараз хуки витісняють redux?
ты сравнил тёплое с мягким. Идея редакса - сделать единое хранилище информации для всего проекта и способ как изменять эту информацию в хранилище. Хуки - это технология, которая помогает приблизить stateless компоненты к функциональности классовых компонентов.
Если честно, сколько уже времени прошло, а мне всё ещё тошно от этого редакса. Идея хорошая, но реализация слишком запутанная. Я всегда пытаюсь найти библиотеку с идеей редакса, но более простой и понятной реалзиацией.
Поработав с классами на реакте, потом с хуками, я пришёл к выводу, что плюсы и минусы хуков уравниваются с плюсами и минусами классов. У меня есть проекты на классах и я вообще не вижу в них проблем, не вижу что компоненты какие-то "нечитаемые" или ещё что-то, всё понятно всё нормально. У хуков есть свои удобные плюшки, но слишком много нужно думать об оптимизации.
А когда дэдлайн у этой домашки? Как и все до понедельника??
я не буду проверять эту домашку...
исключу только тех кто вообще ничего не запостил в гит.
Речь о этом видимо. До какого срока должно что-то появиться в гите, чтобы не удалили?
утро понедельника
Спасибо) А то тоже проблем и дел не то, что по горло...
Завтра урок на 9 утра