Skip to content

Instantly share code, notes, and snippets.

@StevenJL
Last active March 21, 2017 21:09
Show Gist options
  • Save StevenJL/9186fc4f031bddddafb1 to your computer and use it in GitHub Desktop.
Save StevenJL/9186fc4f031bddddafb1 to your computer and use it in GitHub Desktop.
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { addTodo, completeTodo, setVisibilityFilter, VisibilityFilters } from '../actions'
import AddTodo from '../components/AddTodo'
import TodoList from '../components/TodoList'
import Footer from '../components/Footer'
class App extends Component {
render() {
// Also note the destructuring syntax:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
const { dispatch, visibleTodos, visibilityFilter, onTodoClick } = this.props
return (
<div>
...
</div>
)
}
}
function selectTodos(todos, filter) {
switch (filter) {
case VisibilityFilters.SHOW_ALL:
return todos
case VisibilityFilters.SHOW_COMPLETED:
return todos.filter(todo => todo.completed)
case VisibilityFilters.SHOW_ACTIVE:
return todos.filter(todo => !todo.completed)
}
}
// Which state props do we want to make available to this component
function mapStateToProps(state) {
return {
visibleTodos: selectTodos(state.todos, state.visibilityFilter),
visibilityFilter: state.visibilityFilter
}
}
// to make callbacks that which invoke dispatch
function mapDispatchToProps(dispatch) {
return {
onTodoClick: (id) => {
dispatch(toggleTodo(id))
}
}
}
// Wrap the component to inject dispatch and state into it
export default connect(mapStateToProps, mapDispatchToProps)(App)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment