Слабая связность и высокая переиспользуемость представлений + логики
- Высокая переиспользуемость БЛ
Несколько безсвязных фич, могут использовать внутри себя другую фичу со всеми ее вытекающими. Композиция фич на уровнеeffector
- Абстракция БЛ
ExcludeNodes {ru}, {by}, {ua}, {kz} | |
StrictNodes 1 | |
GeoIPExcludeUnknown 1 | |
ExitNodes {de}, {fr}, {fi}, {nl}, {nz}, {no}, {ch}, {se}, {dk}, {ee} | |
ClientTransportPlugin obfs4 exec /usr/local/bin/lyrebird managed | |
UseBridges 1 | |
# Brides here |
/** | |
* A TypeScript type alias called `Prettify`. | |
* It takes a type as its argument and returns a new type that has the same properties as the original type, | |
* but the properties are not intersected. This means that the new type is easier to read and understand. | |
*/ | |
type Prettify<T> = { | |
[K in keyof T]: T[K]; | |
} & {}; |
<div id="app"> | |
<button id="reset">reset</button> | |
<button id="outer">no leak</button> | |
<div id="container"> | |
<button id="inner">leak</button> | |
<span>1</span> | |
<span>2</span> | |
<span>3</span> | |
<span>4</span> | |
<span>5</span> |
import { matchPath, RouteProps } from "react-router"; | |
// historyUpdated event is subscribed to history via history.listen or any other way | |
export const createPathMatcher = <Match = unknown>(config: { | |
path: string | string[] | RouteProps; | |
clock?: Event<any> | Store<any> | Effect<any, any>; | |
}) => { | |
return sample({ | |
source: historyUpdated, |
# https://www.zeolearn.com/magazine/setting-caching-headers-for-a-spa-in-nginx-cache | |
server { | |
listen 80; | |
server_name localhost; | |
root /usr/share/nginx/html; | |
# X-Frame-Options is to prevent from clickJacking attack | |
add_header X-Frame-Options SAMEORIGIN; | |
#!/bin/bash | |
# | |
# Inspects branch name and checks if it contains a Jira ticket number (i.e. ABC-123). | |
# If yes, commit message will be automatically prepended with [ABC-123]. | |
# | |
# Useful for looking through git history and relating a commit or group of commits | |
# back to a user story. | |
# |
import { | |
createStore, | |
createEvent, | |
is, | |
clearNode, | |
forward, | |
sample, | |
Store, | |
Event, | |
launch |
import React from 'react' | |
import ReactDOM from 'react-dom' | |
import {createEvent, createStore, createApi, sample, combine} from 'effector' | |
import {useStore} from 'effector-react' | |
const inputStore = createStore('') | |
const todos = createStore([]) | |
const visibilityFilter = createStore(todos => todos) | |
const submit = createEvent('sumbit form') |