• Что нужно узнать перед тем, как изучать изоморфные приложения react-redux?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    С вебпаком можно разбираться по ходу работы

    express.js - просто фреймворк для Node.js , нужно базовое понимание MVC + представление о роутинге

    Нужно нормальное знание JS . Всё.
    Ответ написан
    2 комментария
  • Зачем в этом коде key и refs нужны?

    @Zvezdocheteg
    Key не использует в компоненте CommentList, так что это лишний props.
    ref -> this.comments тоже доступен только в области видмости Article но он там не используется, так что эти 2 пропса лишние.
    Ответ написан
    Комментировать
  • Каким IDE пользуетесь для разработки на реакте и почему?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    webstorm. подстветка хорошая, подсказка переменных и функций и еще куча плюшек о которых можно узнать на сайте производителя)))
    Ответ написан
    3 комментария
  • Каким IDE пользуетесь для разработки на реакте и почему?

    loktionov129
    @loktionov129
    Backend .NET Developer
    VSCode потому что из бесплатных самый простой, быстрый и удобный.
    Ответ написан
    Комментировать
  • Как получить год из даты (проблема с getFullYear)?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Скорее всего, у вас проблема с жизненным циклом. Возможно, пропсы динамически обновляются после маунта компонента или ещё что-то подобное происходит. Проблема не в том, что год получить не удаётся, а в том, что вместо dateRange вам приходит пустой объект (или объект, у которого нет свойства start или оно есть, но равно undefined).
    Разберитесь с жизненным циклом своего компонента и добавьте соответствующие проверки на валидность его пропсов.
    Ответ написан
    2 комментария
  • Остаться работать или уволиться?

    tema_sun
    @tema_sun
    Выучить новую технологию за чужой счет штука довольно заманчивая, на мой взгляд.
    Ответ написан
    Комментировать
  • Как будет с ES6?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Можно так:
    В компоненте в из которого передаете хандлер определяете его как inline arrow class function:
    class Parent {
      onNoteDelete = note => {
        // some stuff
      };
    }

    Такие функции не теряют контекст. Либо, можно забиндить хандлер в конструкторе, как посоветовали выше.

    Метод render:
    render() {
      const { notes, onNoteDelete } = this.props; 
      
      return(
        <div className="notes-grid" ref="grid">
          {notes.map(note => (
            <Note 
              key={note.id} 
              color={note.color}
              onDelete={() => onNoteDelete(note)}
            >
              {note.text} 
            </Note>
           ))}
        </div>
      )
    }


    Для значений которые не переопределяются лучше использовать const, а не let. Так другие программисты будут сразу видеть, что значение не переопределяется и как следствие ваш код будет читаемей.
    Ответ написан
    Комментировать
  • Почему код именно такой?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    Почему есть строка this.props.onNoteAdd(newNote); а не this.props.handleNoteAdd(newNote)?


    Сначала про это. Посмотри на вызов этого компонента.
    <NoteEditor onNoteAdd={this.handleNoteAdd}/> -- эта строчка передаёт пропс с именем onNoteAdd , который вызывает функцию this.handleNoteAdd . Поэтому в компонент приходит пропс с названием onNoteAdd Всё. Можешь переименовать, если хочешь.

    Почему дублируется функция? Она не дублируется.
    - Функция во вложенном компоненте "собирает" заметку. Ну, читает id, цвет, создаёт объект с этими параметрами и передаёт в функцию родителя. Собирать заметку лучше именно во вложенном компоненте, ибо текст заметки хранится в его стейте.
    - Функция в родителе просто пушит новую заметку в массив уже созданных
    Ответ написан
    Комментировать
  • В чем ошибка Cannot read property of undefined?

    У компонента нет свойства this.prevProps. prevProps приходит в функцию аргументом.
    Ответ написан
    Комментировать
  • Что не так с таймером?

    При использовании React.createClass, все методы в компоненте автоматически биндятся. Поэтому this там не теряется.
    При использовании ES6-классов такого уже не происходит. И поэтому внутри tick this уже теряется.
    Исправить это можно простым биндингом:
    this.timer = setInterval(this.tick.bind(this), 1000);
    Ответ написан
    2 комментария
  • Нужны ли props?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Если не используете props, не пишите.
    Когда используете, можно делать деструктуризацию:
    function Welcome({ name }) {
      return <h1>Hello, {name}</h1>;
    }


    Второй вопрос:
    export default function Welcome() {
      return <h1>Hello, World!</h1>;
    }
    Ответ написан
    Комментировать
  • Как правильно использовать react component?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Функция map превращает в колбеке элемент вашего массива данных в JSX код описывающий элемент и на выходе выдает массив таких элементов. Это лучший и общепринятый способ рендерить списки в react.
    Банальный пример:
    const employees =  ['Bill', 'Matt', 'Sarah'];
    
    return (
      <ul>
        {employees.map((employee, i) => (
          <li key={i}>employee</li>
        )}
      <ul>
    );

    Результат:
    <ul>
      <li>Bill</li>
      <li>Matt</li>
      <li>Sarah</li>
    </ul>


    2. "Element" как видите строка. Тут разработчики просто пушат в массив строку, но в идеале тут должна вызываться функция иницирующая запрос к серверу.
    Вот более приближенный к жизни пример:
    class Example extends Component {
      state = {
        elements: [],
        page: 1,
        limit: 20,
        total: 0,
        isLoading: false,
        isError: false,
      };
      
      componentDidMount() {
        this.loadThumbnails();
      }
     
      loadThumbnails = () => {
        const { page, limit } = this.state;
        
        this.setState({
          isLoading: true,
          isError: false,
        }, () => {
          axios.get(
            `api/somePath?limit=${limit}&page=${page + 1}`
          ).then(response => {
            const { data: { elements, total } } = response;
          
            this.setState(prevState => ({
              elements: [
                ...prevState.elements,
                ...elements
              ],
              page: page + 1,
              isLoading: false,
              total,
            }));
          }).catch(error => {
            this.setState({
              isLoading: false,
              isError: true,
            });
          });
        });
      };
      
      render() {
        const {
          elements,
          page,
          limit,
          total,
          isLoading,
        } = this.state;
    
        const hasMore = page * limit < total;
    
        return(
          <MasonryInfiniteScroller
            hasMore={hasMore}
            loadMore={this.loadThumbnails}
          >
            {elements.map(element => (
              <img
                key={element.id}
                src={element.thumbnail}
                style={{
                  width: element.width + 'px',
                  height: element.height + 'px',
                }}
              />
            )}
            {isLoading && <div>...Loading</div>}
            {isError && (
              <div>
                Can't load data. Please, check your internet connection.
                <button onClick={this.loadThumbnails}>
                  Try again
                </button>
              </div>
            )}
          </MasonryInfiniteScroller>
        ); 
      }
    }


    Тут как только вы пролистнете список
    Ответ написан
    1 комментарий
  • Как улучшить грид?

    DDolgy
    @DDolgy
    Распи***й
    Ответ написан
    Комментировать
  • Что значит этот код const {date: TodayDate, transactions} = this.state?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Деструктуризация.

    Такая запись в ES6:
    const { date: TodayDate, transactions } = this.state;

    равносильна, такой записи в ES5:
    const TodayDate = this.state.date;
    const transactions = this.state.transactions;


    es6-features.org/#ObjectMatchingShorthandNotation
    Ответ написан
    Комментировать
  • Что значит этот код const {date: TodayDate, transactions} = this.state?

    mmmaaak
    @mmmaaak
    результат компиляции babel-ом по нему поймешь, для чего такая запись
    Ответ написан
    Комментировать
  • Курсы реакт, что дальше?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Все что написано до вас может быть:
    а) написано хорошо
    б) написано плохо
    в) настраиваться легко и удобно (вытекает из А)
    г) настраиваться плохо, кастомизация и универсальность на нуле, поддержка компонента медленная или вообще не производится (вытекает чаще всего из Б, но иногда хороший компонент могут просто забросить и тогда появляется его форк или конкурент, или не появляется).

    Итого, при поиске компонента, смотрите на гитхабе: сколько issues (активных/закрытых и какие), обновляется ли компонент (если это требуется, обычно да, хотя бы реакт и проп-тайпсы должны быть версии повыше).

    Следовательно, теперь вопрос, когда нужно взять уже готовый, а когда нет. Все зависит от временных затрат.
    1) Если для выполнения чего либо вы нашли хороший компонент, понимаете как его настроить - берите. Если в процессе он вас не устроит, вы его либо допилите (что вряд ли, на уровне новичка), либо откажетесь и возьмете другой/напишете свой.
    2) Если для выполнения чего либо, вы понимаете сколько это займет кода и какого, что это быстро/просто/удобно или если такого компонента, подходящего для вас, нет - пишете свой.

    На практике может выглядеть так: есть библиотеки с графиками, есть UI библиотеки (которые устраивают вас по дизайну или для прототипа), для таблиц, для работы с датами, для календарей - то есть все популярные задачи, обычно уже сделаны, и сделаны хорошо - БЕРЕМ. Но вам для работы все равно останется место: нужно будет прислать в эти компоненты данные с сервера, научить их как-то отправлять от пользователя какие-то действия к вам на сервер и тд тп.
    Ответ написан
    3 комментария
  • Что такое роутинг?

    @IAKO
    Тут надо перестроить мышление. Я так же не мог врубиться долго что такое REST api.

    Соль в том, чтобы провести аналогию: в "обычном" приложении ты используешь какие-либо методы/процедуры буквально посредством вызова функции, а в веб-приложении ты можешь вызывать их посредством запроса к серверу по определенному адресу (маршруту). Т.е. вместо app.setState({view: krasivo}) у тебя http://app.com/wow. Поэтому столько внимания маршрутизации вообще.
    Ответ написан
    Комментировать
  • Как отцентрировать блок независимо от высоты html?

    @Zewkin
    Я у мамы фронтэндер
    Фиксировать высоту блока, top: 50% и margin-top: минус половина его высоты
    Ответ написан
    Комментировать
  • Как отцентрировать блок независимо от высоты html?

    У Вас размер блока указан в vh это и есть ваша зависимость. Меняется размер окна - меняется размер блока соответственно. Хотите что бы не менялся размер, указывайте абсолютные единицы, px например. А положение его не меняется, ну опять же смотря относительно чего.
    Ответ написан
    Комментировать
  • Как отцентрировать блок независимо от высоты html?

    LenovoId
    @LenovoId
    svg, css,js
    как всегда :
    position:absolute 
    top:50% left:50%
     transform:translate(-50%,-50%);
    Ответ написан
    3 комментария