ReactNative之connect讲解
【摘要】 一、普通写法原来在组件中connect连接redux的写法是:import { connect } from 'react-redux';import { start, stop, reset } from './actions';class Home extends Component { ... // dispatch一个action this.props.d...
一、普通写法
原来在组件中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);
一下就能更清晰了。
三、语法学习
对于第一次接触ReactNative
的同学,最痛苦的是什么时候使用{}
,什么时候使用()
,当然我也经历过那段时间,为此简单总结了下。
ReactNative
中,使用表达式的时候需要用{}
包住;
style={styles.mainStyle}
ReactNative
中,在字符串中使用变量的时候,需要用{}
包住;
var str = 'hello'
<Text>{str}</Text>
ReactNative
中,对象,字典需要用{}
包住;
style = {}, // 最外层表达式,用{}包住
{flex:1}, // 对象,用{}包住
<View style={{flex:1}}></View>
- 创建组件
<View></View>
,必须要用()
包住;
因此只要返回组件,都需要用()
。
render(){
return (
<View style={styles.mainStyle}>
</View>
)
}
四、拓展阅读
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)