Skip to content

Instantly share code, notes, and snippets.

View tricoder42's full-sized avatar
🕴️
I may be slow to respond.

tricoder42

🕴️
I may be slow to respond.
View GitHub Profile
@tricoder42
tricoder42 / react-translated.jsx
Last active November 28, 2016 08:59
What style would you prefer when writing multilingual messages?
// message is constructed using helper functions
const HelperFunction = ({count}) =>
<Trans>
{plural(count, {
one: "One glass",
other: "# glasses"
})} or wine
</Trans>
// message written using template literals
@tricoder42
tricoder42 / 01_simple_mapping.js
Last active June 6, 2017 19:30
2017/06/06 [Medium] Use Selectors in Redux for Great Good
const mapStateToProps = (state) => ({
todos: allTodos(state) // instead of state.todos
})
@tricoder42
tricoder42 / 01_simple_selector.js
Created June 6, 2017 19:30
2017/06/06 [Medium] Use Selectors in Redux for Great Good
const initialState = {
todos: []
}
const reducer = (state = initialState, action = {}) => {
if (action.type === 'ADD_TODO') {
return {
...state,
todos: [...state.todos, action.payload]
}
@tricoder42
tricoder42 / 02_authentication.js
Created June 6, 2017 19:30
2017/06/06 [Medium] Use Selectors in Redux for Great Good
const initialState = {
user: null
}
const getUser = state => state.user
const isAuthenticated = state => Boolean(getUser(state))
@tricoder42
tricoder42 / 02_anonymous_user.js
Created June 6, 2017 19:30
2017/06/06 [Medium] Use Selectors in Redux for Great Good
const initialState = {
user: {
name: 'anonymous',
token: null
}
}
const getUser = state => state.user || {}
const isAuthenticated = state => Boolean(getUser(state).token)
const isAnonymous = state => !isAuthenticated(user)
@tricoder42
tricoder42 / 03_local_selector.js
Created June 6, 2017 19:51
2017/06/06 [Medium] Use Selectors in Redux for Great Good
// const reducer = ...
const ID = 'auth'
const local = state => state[ID]
const getUser = state => local(state).user
const isAuthenticated = state => Boolean(getUser(state))
export default {[ID]: reducer}
module Y2017.M06.D07.Exercise where
{--
So, here's one of the questions Amazon asks developers to test their under-
standing of data structures.
You have a binary tree of the following structure:
A
/ \
@tricoder42
tricoder42 / 01_fetchSaga.js
Created June 13, 2017 07:39
2017/06/13 [Medium] redux-saga factories and decorators
export const fetchSaga = (entity, api) => function* ({ payload }) {
try {
const data = yield call(api, payload)
yield put(entity.response(data))
}
catch(error) {
yield put(entity.response(error))
}
}
@tricoder42
tricoder42 / 02_fetchSaga.example.js
Created June 13, 2017 07:50
2017/06/13 [Medium] redux-saga factories and decorators
function ApiGetUser({ id }) {
return fetch(url`/user/${id}`)
}
// Just an example. Action creators are usually
// created using `createAction` from `redux-actions`
const getUser = {
request: (id) => ({
type: 'USER_GET@REQUEST',
payload: { id }
@tricoder42
tricoder42 / 04_network_down.js
Last active June 13, 2017 08:08
2017/06/13 [Medium] redux-saga factories and decorators
export function* checkConnection () {
let interval = 1
// eslint-disable-next-line no-constant-condition
while (true) {
// race == wait for effect which comes first
const { timeout, up } = yield race({
// ping triggered manually
// e.g: 'reconnect now' button
ping: take(action.networkPing),