Pull to refresh
0
0
RayMan @RayMan

User

Send message
1. Ага и все сразу становится понятнее :)
2. Потому что это магия, да и опечатки сложнее искать:
2.1. + Интерфейс дает возможность валидировать экшн в редьюсеры и все типы отлично подсказываются в IDE.
export interface UserState {
	data: IUser;
}

const initialState: UserState = {
	data: null
};

export default createReducer({
	[SET_USER]: (state, { payload }: SetUserAction) => {
		return assign(state, {
			data: payload
		});
	}
}, initialState);

Во первых тогда type будет иметь тайп string, а не 'SET_USER';
Во вторых константа SET_USER нужна так же и в редьюсе, или там тоже строкой писать?
Если вы про $mol, то тогда понятно. Типизации там очень мало, как по мне, для typescript проекта.

Ну а «мало кто сможет понять» слишком преувеличено.
Подождите, а вы писали что нибудь на typescript?
А можно подробнее? Что тут не понятного?
А в чем проблема типизирования actions?

export interface Action<T extends string> {
	readonly type: T;
}

export interface PayloadAction<U extends string, T> extends Action<U> {
	readonly payload: T;
}

//

export const SET_USER = 'SET_USER';

export interface SetUserAction extends PayloadAction<typeof SET_USER, IUser> {}

export const setUser = (user: IUser): SetUserAction => ({
	type: SET_USER,
	payload: user
});
В typescipt можно делать так:

"baseUrl": "./",
"paths": {
    "pkg-*": ["./packages/pkg-*"]
}


В webpack:

resolve: {
   modules: [
      path.join(__dirname, '..', 'packages'),
      path.join(__dirname, '..', 'node_modules')
   ]
}


После этого просто разбиваешь проект на саб пакеты и используешь:

import { BasicEvent } from 'pkg-common/Utils/Events/BasicEvent';
import { Button } from 'pkg-components/Button';

common.js

import $ from '$';
import JSON from 'JSON';
import _ from '_';
import Q from 'Q';
import moment from 'moment';

export {$, JSON, _, Q, moment};


index.js

import {$, _} from 'common';

$('#app').hide();
Черное зеркало. Там 3 фильма в одном.
в Highscreen Zera F «Обновление ПО» находится не в настройках, а в списке приложений.
А что будет, если перейти на /catalog/action1/42 и нажать в браузере F5? (.htaccess допустим не работает)
Можно:

data-bind='template: { name: «GridColumnTable», foreach: Columns, templateOptions: { ViewModelParent: $data } }'

и

click: function(event){ $item.ViewModelParent.TotalCallsGrid.ChangeSort(this); }

примерно так.
По мне так backbone сложнее и сильнее завязан на верстку.

Например следующий код перестанет отрабатывать, как только ссылку заменят кнопкой или просто сменят название класса. Такой подход не далеко ушел от jQuery.delegate

events: {
«click .todo-clear a»: «clearCompleted»
}

В knockoutjs все это находится в темплейте, т.е. в одном месте.
+ Очень просто связывать элементы формы. Меняешь значения переменной в модели, автоматом обновляется значение в текстовом поле и наоборот.
Использую knockoutjs уже несколько месяцев и не могу нарадоваться.
Понял что до этого страдал фигней :). Очень рекомендую всем.
Мде. Вот это я не обновил страничку )
«Инкремент инициализированной переменой i=0; ++i; быстрее, чем не инициализированной ++i»

Начинать работать с не инициализированными переменными нельзя, или у вас поощряются нотисы?

Да и вообще, 80% советов можно смело переносить в пункт «Бесполезная оптимизация».

Если же у вас проект, в котором нагрузки такие, что не хватает скорости самого php, то думаю что нужно менять язык, а не применять эти советы.
Ужас какой то. Особенно про «Использование сложных запросов к БД быстрее».
Прикольно что гугл, который даже не смотрит в сторону Оперы, в статье ставит ее как пример.
$.live() уже не модно. $.delegate() наше все.
1

Information

Rating
Does not participate
Location
Таганрог, Ростовская обл., Россия
Date of birth
Registered
Activity