Задать вопрос
  • Можно ли использовать local storage браузера для хранения состояния приложения react?

    sarapinit
    @sarapinit
    Точу водой камень
    Да в общем у как и у любого кэша проблемы начинаются когда его нужно инвалидировать. Куки вы можете переписать с сервера.

    Ну еще могут быть проблемы если код что-то криво запишет и поломает вашу структуру (если она есть конечно). То есть если вы сохраняете обьект то нужно быть готовым что он может вернуться из хранилища невалидным. Но это проблемы скорее больших приложений с несколькими разработчиками.
    Ответ написан
    Комментировать
  • Можно ли использовать local storage браузера для хранения состояния приложения react?

    минусов нет и много кто так делает.
    Для этого в общем-то localstorage / sessionstorage и придуманы.
    В local storage нельзя только класть всякие чувствительные данные, типа паролей, токенов, и сессий.
    Ответ написан
    2 комментария
  • Что писать в строке "Опыт работы за последние 3 года"?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Зависит от конкретного hh и степени идиотизма конкретной компании.

    У нас в разные периоды при разных "верхах" были 2 разных взгляда на этот вопрос(найм в компанию людей):

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

    Вывод: лично я склоняюсь больше к 1му взгляду, но очень много компаний и особенно hh(которые работают в IT, но пожизненные гуманитарии) расценивают отсутствие опыта вообще какого либо - как вашу несостоятельность. Выбор за вами.

    PS: лично я не вижу ничего плохого в том, что человек 20 лет работал в сфере продаж, и потом у него появилось желание освоить профессию программиста(поэтому ставить - не зазорно). Есть особая категория "старперов" и "элиты", который считают что если программирование - то java, если программист - то 20 лет в профессии и начинай с университета. Именно такие будут отсеивать ваши резюме с не-релевантным опытом. Вопрос: нужны ли в будущем вам такие коллеги - тут подумайте сами.
    Ответ написан
    2 комментария
  • Как сделать такой loader?

    Aetae
    @Aetae
    Тлен
    Видел тут: https://ant.design/components/progress/
    Но это часть системы, придётся расковырять сырцы, если нужно отдельно.

    "Чистую" версию тоже когда-то вроде встречал, но тут, увы, ссылок не дам.
    Ответ написан
    1 комментарий
  • Как сверстать такое меню?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Если Вам нужно чтобы заливка обрезалась по дуге с картинки, то бы сделал как-то так:
    header, внутри которого nav.
    Задал бы хедеру логотип(с вот этой дугой вметсе) фоновой картинкой, а на основную высоту логотипа задал бы padding сверху. Соответственно, спозиционировал бы правильным образом фоновую картинку с помощью background-position: center top XXpx; (где XX это вот тот зазор сверху между логотипом и самым верхом страницы, пикселей 20 на глаз)
    Ну а теперь самое интересное.
    Обрезал бы nav с помощью clip-path, в соотвествии с розовой линией, указав клюевые координаты, чтобы было плюс минус-дуга. При этом крайние координаты указывал бы в процентах, что позволит nav расти вниз, при добавлении ссылок.
    60b7da23d545a607927710.jpeg

    UPD: мне стало интересно и я решил набросать простенькую демку по описанному выше. Правда картинку выбрал по сложнее :-)
    Откройте в новой вкладке и сделайте ширину в 768пикселей, чтобы более менее адекватно выглядело(хотя тут в фрэйме тоже пойдёт).
    Более плавной дуги можно достичь увеличением количества точек в полигоне. В этом может помочь иллюстратор.
    Можно нарисовать этот полигон прямыми линиями в нём, экспортировать в свг, а потом посмотреть оттуда координаты точек.
    Ну а для более лёгкого адаптива точки нужно рисовать в процентах, а не пиксилях.
    Ответ написан
    Комментировать
  • Замена фотошоп есть?

    @ProstoChel92
    Начинающий фронтендер(очень начинающий)
    Marsy - отличный вариант.
    Ответ написан
    Комментировать
  • Как лучше реализовать appendchild в реакте?

    Simkav
    @Simkav
    Грузите свои таски в массив, и мапом проходитесь по нему
    псевдокод
    tasks.map((task) => <div>{task....}<div/>)
    p.s
    Ну и не забываем про key
    p.s
    doc
    Ответ написан
    2 комментария
  • Зачем нужен Gulp?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Комментировать
  • Как сделать задный фон как на этом сайте?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    60ae10747a3f2832587700.png

    Повторение двух цветов, наклон и транслейт с помощью - transform: skew, translate
    https://webref.ru/css/value/skew
    Ответ написан
    Комментировать
  • Как написать одну функцию для 4 разных компонентов?

    0xD34F
    @0xD34F Куратор тега React
    Вместо нескольких стейтов пусть будет один - объект. Общий обработчик onChange достаёт из целевого объекта помимо значения ещё и имя инпута, одновременно являющегося именем обновляемого свойства (его придётся передавать в экземпляры CustomTextField, а внутри самого CustomTextField прокидывать внутрь TextField). Вот так (как добавить два других свойства - думаю, сами догадаетесь):

    interface IFormData {
      firstName: string;
      lastName: string;
    }

    const [ formData, setFormData ] = React.useState<IFormData>({
      firstName: '',
      lastName: '',
    });
    
    const onChange = (e: React.ChangeEvent<HTMLInputElement>) => setFormData({
      ...formData,
      [e.target.name]: e.target.value,
    });

    <CustomTextField name="firstName" value={formData.firstName} onChange={onChange} />
    <CustomTextField name="lastName" value={formData.lastName} onChange={onChange} />
    
    <!-- или -->
    
    {Object.entries(formData).map(([ k, v ]) => (
      <CustomTextField key={k} name={k} value={v} onChange={onChange} />
    ))}
    Ответ написан
    Комментировать
  • Примеры приложений MERN стека?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    Вообще удобно смотреть по realworld app - там стандартизован интерфейс, есть разные имплементации фронтов и бэка
    https://codebase.show/projects/realworld
    Бэк по nodejs+mongo там сейчас не поддерживается.
    Но ознакомиться можно тут: https://github.com/gothinkster/node-express-realwo...
    Впрочем есть свежий пример на базе SQL БД: https://github.com/Varun-Hegde/Conduit_NodeJS
    С реактом там 3 варианта на выбор
    Ответ написан
    1 комментарий
  • Как использовать setInterval для простейшего таймера?

    @tehfreak
    Все дело в замыкании. Переданная в setInterval функция замыкает в себе переменную seconds в значении ноль. Интервал работает, но при каждом следующем вызове функции переменная seconds имеет прежнее значение.

    В setSeconds нужно передать функцию, которая будет вызвана с актуальным значением seconds.

    Вот так:
    function App() {
        
        const [ seconds, setSeconds ] = React.useState(0)
    
        // старый вариант, не работает
        const startTimer = () => {
            setInterval(() => {
                setSeconds(seconds + 1)
            }, 1000)
        }
    
        // новый вариант, работает
        const startTimer = () => {
            setInterval(() => {
                setSeconds((seconds) => {
                    return seconds + 1
                })
            }, 1000)
        }
    
        return (
            <div>
                <button onClick={startTimer}>start</button>
                <h1>{seconds}</h1>
            </div>
        )
    }
    Ответ написан
    Комментировать