ember-redux v6.0.0
Ember Redux
Predictable state management for ember apps
Installation
ember redux requires ember v3.6+ and node >= 8. If you need support for an older version of ember use the v5 release
ember install ember-redux
Documentation and Examples
Demo
Counter https://ember-twiddle.com/5bee7478e4216abe49f1c0a439bae352
TodoMVC https://ember-twiddle.com/4bb9c326a7e54c739b1f5a5023ccc805
Usage
Container Component
import Component from '@ember/component';
import hbs from 'htmlbars-inline-precompile';
import { connect } from 'ember-redux';
import getUsersByAccountId from '../reducers';
import fetch from 'fetch';
const stateToComputed = (state, attrs) => ({
users: getUsersByAccountId(state, attrs.accountId)
});
const dispatchToActions = (dispatch) => ({
remove: (id) => fetch(`/api/users/${id}`, {method: 'DELETE'}).then(fetched => fetched.json()).then(response => dispatch({type: 'REMOVE_USER', id: id}))
});
const UserListComponent = Component.extend({
layout: hbs`
{{yield users (action "remove")}}
`
});
export default connect(stateToComputed, dispatchToActions)(UserListComponent);
Presentation Component
import Component from '@ember/component';
import hbs from 'htmlbars-inline-precompile';
const UserTableComponent = Component.extend({
layout: hbs`
{{#each users as |user|}}
<div>{{user.name}}</div>
<button onclick={{action remove user.id}}>remove</button>
{{/each}}
`
});
export default UserTableComponent;
Composition
{{#user-list accountId=accountId as |users remove|}}
{{user-table users=users remove=remove}}
{{/user-list}}
Octane Support?
As of version 6 ember-redux now supports both ember component and glimmer component. One brief example of glimmer components and ember redux below.
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { connect } from 'ember-redux';
import getUsersByAccountId from '../reducers';
import fetch from 'fetch';
const stateToComputed = (state, attrs) => ({
users: getUsersByAccountId(state, attrs.accountId)
});
const dispatchToActions = (dispatch) => ({
remove: (id) => fetch(`/api/users/${id}`, {method: 'DELETE'}).then(fetched => fetched.json()).then(response => dispatch({type: 'REMOVE_USER', id: id}))
});
class MyClazz extends Component {
@action
example() {
this.actions.remove();
}
}
export default connect(stateToComputed, dispatchToActions)(MyClazz);
How do I enable time travel debugging?
Install the redux dev tools extension.
Enjoy!
Running Tests
yarn
ember test
License
Copyright © 2019 Toran Billups https://toranbillups.com
Licensed under the MIT License
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago