• Как увязать React router и Redux-редьюсеры?

    devellopah
    @devellopah
    просто мысли вслух

    // types
    const types = {
    	UPDATE_FIELD: 'UPDATE_FIELD',
    };
    //types
    
    // operations
    const updateField = (value, error) => (
    	{ type: types.UPDATE_FIELD, value, error }
    );
    
    // reducer
    const initialState = { 
    	values: {email: '', password: ''}, 
    	errors: { email: '', password: '' } 
    };
    
    function someFormReducer(state = initialState, action) {
    	switch(action.type) {
    		case types.UPDATE_FIELD: {
    			return { 
    				values: { ...state.values, ...action.value }, 
    				errors: { ...state.errors, ...action.error };
    		}
    	}
    	
    	return state;
    }
    // reducer
    
    // так примерно выглядит global store
    {
    	...
    	...
    	form: {
    		login: {
    			values: {
    				email: '',
    				password: '',
    			},
    			errors: {
    				email: '',
    				password: ''
    			}
    		},
    	}
    }
    // так примерно выглядит global store
    
    
    import React from 'react';
    import { validateEmail, validatePassword } from 'someValidateLibrary';
    import { connect } from 'react-redux';
    import { browserHistory } from 'react-router';
    	
    import { updateField } from 'path to operations file (action creators)' 
    
    class SomeForm extends React.Component {
    	
    	handleValueChange = (e) => {
    		const field = e.target.name;
    		let error = '';
    		
    		if(field === 'email' && !validateEmail(field)) {
    			error = "You email is so bad, seriously!";
    		} 
    		else if (!validationPassword(field) ) {
    			error = "Your password is sucks!"
    		}
    		
    		this.props.dispatch(
    			updateField(
    				{ field: e.target.value.trim() }, 
    				{ field: error.trim() }
    			)
    		);
    	} 
    
    	proccessForm = () => {
    		const { errors } = this.props;
    		// если ошибок больше нет, то переход на другой роут
    		if(!errors.email && !errors.password) {
    			browserHistory.push('/home');
    		} else {
    			// your code here
    		}
    		
    	}
    	
    	render() {
    		const { values, errros } = this.props;
    		
    		return (
    			// some ui
    			<form onSubmit={this.proccessForm}>
    				<p class="form-field">
    					<input 
    						type="email" 
    						name="email" 
    						onChange={this.handleValueChange} 
    						value={values.email} 
    					/>
    					<span>{errors.email}</span>
    				</p>
    				<p class="form-field">
    					<input 
    						type="text" 
    						name="password" 
    						onChange={this.handleValueChange} 
    						value={values.password} 
    					/>
    					<span>{errors.password}</span>
    				</p>
    				<button 
    					type="submit" 
    					disabled={!values.email && !values.password}>
    						submit
    				</button>
    			</form>
    		);
    	}
    }
    
    const mapStateToProps = ({ form: { login } }) => (
      { values: login.values, errors: login.errors }
    );
    	
    
    connect(mapDispatchToProps)(SomeForm);
    Ответ написан
    4 комментария
  • Какие есть интересные сайты со статьями на тему Frontend?

    @abberati
    frontend-разработчик
    Ответ написан
    Комментировать
  • Нужно ли тащить с собой Babel?

    werty1001
    @werty1001
    undefined
    Я бы не стал интерпретировать в браузере, людям ваши бабели не нужны.
    Ответ написан
    Комментировать
  • Стоит ли учить сегодня ASP.NET и можно ли на этом заработать?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Начнем с терминологии, а то хейтеры тут не особо разбираются =) Между ASP и ASP.NET MVC разница примерно такая же, как между Java и JavaScript.
    Java - это язык, как и C#. Под них есть свои веб-фреймворки, такие как JavaEE, Spring для Java или ASP.NET MVC, NancyFX для C#.


    Учить ASP (classic ASP) или ASP.NET (который Web Forms) с нуля уже не стоит. А вот ASP.NET MVC - отличный выбор. Это уже достаточно зрелый фреймворк, на котором работает много серьезных проектов (таких, как StackOverflow) и которая востребована на рынке как в России, так и в мире.

    Сам C# достаточно интересный, активно развивающийся язык. Платформа себя чувствует неплохо на любых популярных устройствах. Хорошо развивается .NET Core, являющийся переосмыслением монолитного .NET Framework, позволяющий разрабатывать компатные кросслатформенные приложения, в том числе и с использованием ASP.NET Core, которые можно развертывать самостоятельно, без огромного сервера за спиной, аналогично Node.js.

    Конечно, с ASP.NET MVC не пофрилансишь и сайты-визитки разрабатывать не так удобно =) Но поддерживать крупные приложения - одно удовольствие.

    А Java - это уже такой динозаврик, который стагнирует в роли вечного догоняющего, потихоньку будет сходить на нет в ближайшее десятилетие. Да, платформа обеспечила себя специалистами, тоннами легаси-проектов, которые необходимо поддерживать, поэтому с работой и под нее проблем не будет и менеджеры часто выбирают эту штуку, как проверенное десятилетиями средство. Но с точки зрения обычного программиста, я не вижу смысла выбирать Java.
    Ответ написан
    3 комментария
  • Я не умею готовить репозиторий или он просто не очень?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Желательно почитать по поводу работы EF и IQuerable в частности. С помощью этого интерфейса и LINQ вы сможете формировать запросы (которые рендерятся в нативный SQL), а не просто фильтровать коллекции.
    private IQuerable<Student> GetLogs()
    {
        return context.Logs;
    }   
    public IEnumerable<Student> GetLogsForStudent(int id, DateTime from, DateTime to)
    {
        return GetLogs().Where(x => x.Id == id
                                    && x.Date >= from
                                    && x.Date <= to)
                        .ToList();
    }


    Все используют lazy loading?

    Зависит от количества данных и критичности по скорости.

    Если мне нужен в 1 контроллере/сервисе не 1 репозиторий? мне по 1 их подключать?

    Да, по одному. А можно в сервис или UnitOfWork объединять.

    Изачем он для юнит тестов если можно спокойно moqнуть весь dbcontext?

    dbcontext мокать нет смысла хотя бы потому, что он гвоздями к EF прибит. СУБД менять - это не такая распространенная практика, а вот от ORM (и от EF в частности) отказываться в пользу производительности - это реальный кейс с ростом нагрузки.
    Ответ написан
    Комментировать
  • Можно ли выполнять lock на list?

    impwx
    @impwx
    Разработчик
    Допустим, _inner используется у вас во многих местах, и есть некий публичный метод, который его возвращает. Тогда внешний код сможет вызвать этот метод, получить тот же экземпляр объекта _inner и поставить на него свой lock. Так можно случайно словить взаимоблокировку и повесить приложение.

    Подобные моменты бывает очень сложно отследить, потому объект может быть возвращен косвенно, по интерфейсу, или как-либо еще. Отдельное поле _lock - это просто правило хорошего тона, его создают для безопасности: очень маловероятно, что кому-то придет в голову использовать его за пределами инструкции lock и тем более вернуть из метода.

    Если у вас небольшой код и вы уверены, что знаете, что делаете - разницы нет.
    Ответ написан
    Комментировать
  • Почему не подхватывается Converter?

    EugeneP2
    @EugeneP2
    Java Dev
    Сам бин conversionService нужно указать в <mvc:annotation-driven/>

    Conversion and Formatting

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set merge="true">
                <bean class="my.app.OptionConverter"/>
            </set>
        </property>
    </bean>
    
      <mvc:annotation-driven conversion-service="conversionService"/>
    Ответ написан
    5 комментариев
  • Как можно добавить data атрибут при динамическом создании элемента?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    В кавычки возьмите
    $("<div/>", {
         "id": "zoom-map",
          "text": "Увеличить карту",
          "data-toggle": "modal",
         "data-target": "#modal-map-body",
         click: function(){
              $(window.parent.document.getElementById('modal-map-body')).addClass('overlay-map').html('<iframe src="*"></iframe>');
             $(window.parent.document.getElementById('start-map')).click();
           }
     }).insertAfter("ul.map-visible-list");
    Ответ написан
    1 комментарий
  • Где хранить бесконечность записей (111 * 10^29)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это что вы такое собрались хранить?
    95*111*1029 байт ≈ 1034 байт ≈ 1022 терабайт
    Значит покупаете тысячу миллионов миллионов миллионов винчестеров на 10 Tb и получаете своё хранилище.
    Ответ написан
    12 комментариев
  • Как запретить клик левой кнопкой мыши?

    27cm
    @27cm
    TODO: Написать статус
    Отключить обработчик события click, который вы ранее установили – jQuery.off(), или изначально делать событие одноразовым – jQuery.one().
    Ответ написан
    Комментировать