普通写法
原来在组件中connect
连接redux
的写法是:
import { connect } from 'react-redux';
import { start, stop, reset } from './actions';
class Home extends Component {
...
// dispatch一个action
this.props.dispatch(reset());
...
const mapStateToProps = state => ({
timer: state.timer
})
}
export default connect(mapStateToProps)(Home);
或者
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as actions from './actions';
class Home extends Component {
...
// dispatch一个action
this.props.dispatch.reset();
...
const mapStateToProps = state => ({
timer: state.timer
})
const mapDispatchToProps = dispatch => ({
dispatch: bindActionCreators(actions, dispatch)
});
}
export default connect(mapStateToProps, mapDispatchToProps)(Home);
精简写法
因为@connect()
是超前的ES7
写法, 所以需要使用babel
转码。在react-native
项目目录下创建.babelrc
文件, 内容:
{
"presets": ["react-native"],
"plugins": ["transform-decorators-legacy"]
}
并在package.json
中添加插件:
"devDependencies": {
...
"babel-plugin-transform-decorators-legacy": "^1.3.4"
}
在组件中使用:
import { connect } from 'react-redux';
import { start, stop, reset } from './actions';
@connect(state => ({ timer: state.timer }))
class Home extends Component {
...
// dispatch一个action
this.props.dispatch(start());
...
}
export default Home;
或者:
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as actions from './actions';
@connect(
state => ({ timer: state.timer }),
dispatch => bindActionCreators(actions, dispatch),
)
class Home extends Component {
...
// dispatch一个action
this.props.reset();
...
}
export default Home;
其中异同, 可以console.log(this.props);
一下就能更清晰了。