forked from mirrors/gecko-dev
		
	 5b282b009e
			
		
	
	
		5b282b009e
		
	
	
	
	
		
			
			MozReview-Commit-ID: HzL3w8vp8iS --HG-- rename : devtools/docs/backend.md => devtools/docs/backend/backend.md rename : devtools/docs/backward-compatibility.md => devtools/docs/backend/backward-compatibility.md rename : devtools/docs/debugger-api.md => devtools/docs/backend/debugger-api.md rename : devtools/docs/protocol.md => devtools/docs/backend/protocol.md rename : devtools/docs/frontend.md => devtools/docs/frontend/frontend.md rename : devtools/docs/react-guidelines.md => devtools/docs/frontend/react-guidelines.md rename : devtools/docs/react-tips.md => devtools/docs/frontend/react-tips.md rename : devtools/docs/react.md => devtools/docs/frontend/react.md rename : devtools/docs/redux-guidelines.md => devtools/docs/frontend/redux-guidelines.md rename : devtools/docs/redux-tips.md => devtools/docs/frontend/redux-tips.md rename : devtools/docs/redux.md => devtools/docs/frontend/redux.md rename : devtools/docs/svgs.md => devtools/docs/frontend/svgs.md rename : devtools/docs/img/box-model-highlighter-screenshot.png => devtools/docs/resources/box-model-highlighter-screenshot.png rename : devtools/docs/svgs/expand-strokes.gif => devtools/docs/resources/expand-strokes.gif rename : devtools/docs/svgs/pathfinder.gif => devtools/docs/resources/pathfinder.gif rename : devtools/docs/svgs/sketch-position.png => devtools/docs/resources/sketch-position.png rename : devtools/docs/debugger-panel.md => devtools/docs/tools/debugger-panel.md rename : devtools/docs/highlighters.md => devtools/docs/tools/highlighters.md rename : devtools/docs/http-inspector.md => devtools/docs/tools/http-inspector.md rename : devtools/docs/inspector-panel.md => devtools/docs/tools/inspector-panel.md rename : devtools/docs/inspector.md => devtools/docs/tools/inspector.md rename : devtools/docs/memory-panel.md => devtools/docs/tools/memory-panel.md rename : devtools/docs/responsive-design-mode.md => devtools/docs/tools/responsive-design-mode.md rename : devtools/docs/tools.md => devtools/docs/tools/tools.md extra : rebase_source : 96dfbd86b0294a041e0fc82158b1d91a8e9ba9e8
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ### Getting data from the store
 | |
| 
 | |
| To get data from the store, use `connect()`.
 | |
| 
 | |
| When using connect, you'll break up your component into two parts:
 | |
| 
 | |
| 1. The part that displays the data (presentational component)
 | |
| 
 | |
|         // todos.js
 | |
|         const Todos = React.createClass({
 | |
|           propTypes: {
 | |
|             todos: PropTypes.array.isRequired
 | |
|           }
 | |
| 
 | |
|           render: function() {...}
 | |
|         })
 | |
| 
 | |
|         module.exports = Todos;
 | |
| 
 | |
| 2. The part that gets the data from the store (container component)
 | |
| 
 | |
|         // todos-container.js
 | |
|         const Todos = require("path/to/todos");
 | |
| 
 | |
|         function mapStateToProps(state) {
 | |
|           return {
 | |
|             todos: state.todos
 | |
|           };
 | |
|         }
 | |
| 
 | |
|         module.exports = connect(mapStateToProps)(Todos);
 | |
| 
 | |
| 
 | |
| `connect()` generates the container component. It wraps around the presentational component that was passed in (e.g. Todos).
 | |
| 
 | |
| The `mapStateToProps` is often called a selector. That's because it selects data from the state object. When the container component is rendering, the the selector will be called. It will pick out the data that the presentational component is going to need. Redux will take this object and pass it in to the presentational component as props.
 | |
| 
 | |
| With this setup, a presentational component is easy to share across different apps. It doesn't have any dependencies on the app, or any hardcoded expectations about how to get data. It just gets props that are passed to it and renders them.
 | |
| 
 | |
| For more advanced use cases, you can pass additional parameters into the selector and `connect()` functions. Read about those in the [`connect()`](https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options) docs.
 | |
| 
 | |
| ---
 | |
| 
 | |
| Need to answer the following questions:
 | |
| 
 | |
| * How do I do I load asynchronous data?
 | |
| * How do I do optimistic updates or respond to errors from async work?
 | |
| * Do I use Immutable.js for my state?
 | |
| * What file structure should I use?
 | |
| * How do I test redux code?
 | |
| 
 | |
| And more.
 |