Skip to content

Instantly share code, notes, and snippets.

View StevenLangbroek's full-sized avatar

Steven Langbroek StevenLangbroek

View GitHub Profile
export default (fn, ...args) => (e) => {
e.preventDefault();
fn(...args);
};
@StevenLangbroek
StevenLangbroek / 01_server.js
Last active February 18, 2016 08:34
Ok, so here's what happened. (Pseudo-code ahead)
const app = express();
app.use((req, res) => {
// Match routes from React Router
match({ history, routes, location: req.originalUrl }, (err, redirectLocation, renderProps) => {
Promise.all(getFetchFunctions(renderProps).map(fetchThem)).then(() => {
ReactDOM.renderToString(
<Provider>
<Router /> // You get the idea right? All fetches have been ran through the store, and you render out.
</Provider>
export (reducerMap, initialState) => (state = initialState, action) => {
const reducer = reducerMap[action.type];
return reducer ? reducer(state, action) : state;
}
@StevenLangbroek
StevenLangbroek / 01_pureComponent.js
Created January 4, 2016 14:12
Naive Pure Component
import React from 'react';
export default (render) => class extends React.Component {
shouldComponentUpdate(nextProps, nextState){
return nextProps !== this.props;
}
render(){
return render(this.props);
}
import { Provider } from 'react-redux';
import App from './App';
export default (
<Provider>
{() => <App />} // Say whaaaaaat?
</Provider>
);
import React from 'react';
// Higher order component taking care of subscribing
export default (Component) => class ReduxComponent extends React.Component {
componentDidMount(){
const { store } = this.context;
this.unsubscribe = store.subscribe(() => this.forceUpdate());
}
componentWillUnmount(){
@StevenLangbroek
StevenLangbroek / preventDefault.js
Created December 29, 2015 10:06
Stupid simple higher-order function to help with pure components
/*
* So, you're writing pure components now? Awesome right? RIGHT?!?!
* Did you run into this yet?
*/
import React from 'react';
const Item = ({
item,
openItem // a bound redux action creator
@StevenLangbroek
StevenLangbroek / assertion.js
Created December 14, 2015 17:06
PhantomJS :(
// This fails in Chrome / Firefox, but passes in PhantomJS
expect($e.find('.content-wrapper').css('background-image')).toBe("url(http://xxxx/)");
// This fails in PhantomJS, but passes in Chrome / Firefox
expect($e.find('.content-wrapper').css('background-image')).toBe('url("http://xxxx/")');
@StevenLangbroek
StevenLangbroek / IconSpec.js
Last active December 4, 2015 11:15
Render Helper for React
import Icon from './';
import createRenderer from 'utilities/createRenderer';
const render = createRenderer(Icon);
describe('Component: Icon', () => {
it('has the correct attributes', () => {
const { output } = render({
lowResSrc,
@StevenLangbroek
StevenLangbroek / 1-loadable.js
Created November 19, 2015 12:50 — forked from RoyalIcing/1-loadable.js
React Loadable Component
import React from 'react';
import Spinner from 'react-spinner';
export const loadable = (hasLoadedTest, Component) => props => hasLoadedTest(props) ? <Component { ...props } /> : <Spinner />;