Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2016, 21:06
Новичок на форуме
Отправить личное сообщение для АртемЫч Посмотреть профиль Найти все сообщения от АртемЫч
 
Регистрация: 22.09.2016
Сообщений: 5

Разработка на React-е
Добрый вечер, форумчане)
Подскажите плиз, сталкиваюсь всегда с одной проблемой...при проверке тестового задания, мне указывают на то что оставляю хэндлеры в разметке... понимаю что этого не должно быть, но как можно кроме этого способа и кроме AddEventListenerа отлавливать события на элементах??
Ответить с цитированием
  #2 (permalink)  
Старый 22.09.2016, 21:30
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Вот так вешаются события на элементы в реакте:
<div onClick={тут функция обработчик}></div>

Я правильно вопрос понял?
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2016, 21:55
Новичок на форуме
Отправить личное сообщение для АртемЫч Посмотреть профиль Найти все сообщения от АртемЫч
 
Регистрация: 22.09.2016
Сообщений: 5

а какие еще есть варианты? этот способ я и использую...говорят что некорректно использовать хэндлеры в разметке
Ответить с цитированием
  #4 (permalink)  
Старый 22.09.2016, 22:06
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Вот такую запись наверное некорректной посчитали
<div onclick={()=>{ тут сама функция }></div>

скорее всего имели ввиду, что функцию надо писать в компоненте и привязывать ее:
<div onClick={this.onClickHandler.bind(this)}></div>

или, если ее вне компонента поставил
<div onClick={onClickHandler()}></div>
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2016, 22:40
Новичок на форуме
Отправить личное сообщение для АртемЫч Посмотреть профиль Найти все сообщения от АртемЫч
 
Регистрация: 22.09.2016
Сообщений: 5

а чем плохи EventListener-ы добавленные в компоненте после загрузки DOMа ?
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2016, 22:51
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Тем, что идет работа с DOM напрямую. В реакте виртуальный DOM и приложение должно быть в курсе всех обработчиков и действий с элементами, для корректного рендера. Вообще работа с ДОМом напрямую - это антипаттерн и этого надо избегать.
Ответить с цитированием
  #7 (permalink)  
Старый 22.09.2016, 23:31
Новичок на форуме
Отправить личное сообщение для АртемЫч Посмотреть профиль Найти все сообщения от АртемЫч
 
Регистрация: 22.09.2016
Сообщений: 5

спасибо за совет, буду переучиваться)) а еще одно замечание было. которое я если честно вообще не понял... писал приложение на react+redux, подключая компоненты контейнеры через connect... мне было замечание что "гружу данные напрямую в connect"... а как иначе?? синтакссис был примерно такой:

const UserLogin = connect(
mapStateToProps,
mapDispatchToProps
)(UserInfo);
Ответить с цитированием
  #8 (permalink)  
Старый 22.09.2016, 23:55
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Правильно делать так (если через декоратор)
function mapStateToProps(state){
тут какие-то данные из state
}
function mapDispatchToProps(dispatch){
тут какие-то экшены
}
@connect(mapStateToProps, mapDispatchToProps)
тут сам компонент
Ответить с цитированием
  #9 (permalink)  
Старый 23.09.2016, 00:29
Новичок на форуме
Отправить личное сообщение для АртемЫч Посмотреть профиль Найти все сообщения от АртемЫч
 
Регистрация: 22.09.2016
Сообщений: 5

Сообщение от Царь Леонид Посмотреть сообщение
Правильно делать так (если через декоратор)
function mapStateToProps(state){
тут какие-то данные из state
}
function mapDispatchToProps(dispatch){
тут какие-то экшены
}
@connect(mapStateToProps, mapDispatchToProps)
тут сам компонент
--
тут сам компонент : контейнер или вьюха?
Ответить с цитированием
  #10 (permalink)  
Старый 23.09.2016, 09:08
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Контейнер. В нем всё, что было вытащено из этих двух функций будет доступно в props. Собственно connect для того и нужен, чтобы прокидывать что нибудь в компонент. Чтобы стало более понятно, вот типичная структра реакт компонента в редакс:
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';

const mapStateToProps = state => {
    return {
        item: state.item,
        color: state.color
    };
};

const mapDispatchToProps = dispatch => {
    return {
        setItemAndColor: (value)=>dispatch(setItemAndColor(value))
    };
};

@connect(mapStateToProps, mapDispatchToProps)
class MyOwnComponent extends Component {

    render() {
        const { item, color, setItemAndColor } = this.props;
        return (
            <div></div>
        );
    }
}

export default MyOwnComponent;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
React: Работа с fixed-data-table d.alexandr Элементы интерфейса 0 13.09.2016 18:07
Ищу Senior Frontend (React, Angular), Москва, 140 - 180 000 gross, full time офис. Ekaterina Polyakova Работа 0 11.08.2016 19:07
Ищем frontend-разработчика (react js) в небольшой международный проект Варвара Работа 0 31.05.2016 13:10
Нужен фронтенд разработчик со знанием React JS удаленно на проект sergeda Работа 0 13.11.2015 18:40
PHP - Разработка скриптов и CMS. Программирование сайтов f.Michail Работа 16 28.01.2014 08:46