class Movie extends Component {
constructor(props) {
super(props)
this.state = { favorite: false }
}
like() {
this.setState({favorite: true})
}
render() {
return (
<div className='movie'>
<h3>{this.props.movie.title}</h3>
{this.state.favorite ?
<p>It is your favorite movie!</p>
:
<button onClick={this.like.bind(this)}>Favorite this movie</button>
}
</div>
)
}
}
export default Movieclass Movie extends Component {
render() {
return (
<div className='movie'>
<h3>{this.props.movie.title}</h3>
{this.props.favorite ?
<p>It is your favorite movie!</p>
:
<button onClick={MovieActions.like}>
Favorite this movie
</button>
}
</div>
)
}
}
function mapStateToProps(state) {
return { movie: state.movie, favorite: state.favorite };
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(MovieActions, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(Movie);function (initialState) {
return createStore(
combineReducers({ movie: movieReducer }),
initialState,
window.devToolsExtension && window.devToolsExtension()
);
}const update = (state, mutations) =>
Object.assign({}, state, mutations);
function (state = {}, action) {
switch (action.type) {
case 'movie/like':
return update(state, { favorite: true });
default:
return state;
}
}
function play(video) {
return { type: 'movie/like' };
}
@inject('store')
@observer
class Movie extends Component {
render() {
const store = this.props.store
return (
<div className='movie'>
<h3>{store.movie.title}</h3>
{store.favorite ?
<p>It is your favorite movie!</p>
:
<button onClick={store.like}>Favorite this movie</button>
}
</div>
)
}
}
export default Movieclass MovieStore {
movie = {}
@observable favorite = false
@action like() {
this.favorite = favorite
}
}
const movieStore = new MovieStore()
export default movieStorefrom: https://www.robinwieruch.de/redux-mobx-confusion/