Skip to content

Instantly share code, notes, and snippets.

View oreqizer's full-sized avatar
💪
Gainz o'clock

Boris oreqizer

💪
Gainz o'clock
View GitHub Profile
@oreqizer
oreqizer / Todos.jsx
Last active December 6, 2016 12:20
An example of a smart component.
import React, { PureComponent, PropTypes } from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router';
import { List } from 'immutable';
import TodoItem from './TodoItem';
import TodosForm from './TodosForm';
import todosSelector from './todosSelector';
import * as todoActions from '../../../universal/modules/todo/todoDuck';
@oreqizer
oreqizer / TodoItem.jsx
Created December 1, 2016 14:21
An example of a dumb component.
import React, { PropTypes, PureComponent } from 'react';
import Todo from '../../../universal/containers/Todo';
const doneStyle = {
textDecoration: 'line-through',
};
const notDoneStyle = {
@oreqizer
oreqizer / Contextful.jsx
Last active December 1, 2016 17:09
An example of a simple component connected to Redux store.
import React from 'react';
import { connect } from 'react-redux';
import { injectIntl } from 'react-intl';
import messages from './messages';
const TodoList = props => (
<div className="TodoList">
<h3>{props.intl.formatMessage(message.listHeader)}</h3>
{props.todos.map(todo => (
@oreqizer
oreqizer / Contextless.jsx
Created December 1, 2016 17:11
An example of a nice, independent component.
// @flow
import React from 'react';
import Todo from '../containers/Todo';
type Props = {
header: string,
todos: Todo[],
}
@oreqizer
oreqizer / BadTodo.jsx
Last active July 6, 2017 11:49
An example of a WRONG partial application approach.
// WRONG!
// Always use a class/memoization for partial application
// and keep props flat, or implement 'shouldComponentUpdate'.
import React from 'react';
import CountryIcon from './CountryIcon';
import Box from './Box';
const BadTodo = props => (
<Box onClick={() => props.onClick(props.todo.id)}>
@oreqizer
oreqizer / TurboTodo.jsx
Last active July 6, 2017 11:50
A cleaned up version of my previous example.
import React, { PureComponent } from 'react';
import CountryIcon from './CountryIcon';
import Box from './Box';
export default class TurboTodo extends PureComponent {
handleClick = () => {
const { todo, onClick } = this.props;
onClick(todo.id);
@oreqizer
oreqizer / CountryIcon.jsx
Last active December 2, 2016 12:48
A sample 'shouldComponentUpdate' function.
// ... code
shouldComponentUpdate(nextProps) {
const { geo, ...rest } = this.props;
const geoOk = geo.lat === nextProps.geo.lat && geo.lon === nextProps.geo.lon;
return !(geoOk && Object.keys(rest)
.reduce((acc, key) => acc && rest[key] === nextProps[key], true));
}
// ... code
@oreqizer
oreqizer / TurboTodo2.jsx
Last active July 6, 2017 11:52
An optimized Todo version without modifying external components.
import React, { PureComponent } from 'react';
import CountryIcon from './CountryIcon';
import Box from './Box';
export default class TurboTodo extends PureComponent {
constructor(props) {
super(props);
this.geo = { lat: props.lat, lon: props.lon };
@oreqizer
oreqizer / CleanComponents.jsx
Last active December 2, 2016 13:02
An example of logic-less components.
import React, { Component } from 'react';
const FnComponent = props => (
// ...your JSX
);
class ClassComponent extends Component {
// ...lifecycle hooks
// ...handlers
@oreqizer
oreqizer / todoSelector.js
Last active July 6, 2017 11:48
An example of a selector.
import { createSelector } from 'reselect';
// sub-selectors
const allTodoSelector = state => state.todo.todos; // an array of todos
const filterSelector = (_, props) => props.params.filter; // a url parameter
// a selector
const todoSelector = createSelector(
[allTodoSelector, filterSelector],
(todos, filter = 'all') => {