react-native - 如何连接 react 与 redux?
问题描述
所以我正在尝试使用 react-native 来了解 react-redux,并且我想创建一个页面,我可以在其中输入数字并按登录。当我按下登录时,页面会提醒我输入的数字并保存到我用 redux 创建的商店中。
谁能告诉我我做错了什么,我应该添加什么或做什么才能让它工作?
下面是我的测试页面
import React, {Component} from 'react';
import {View, TextInput, TouchableOpacity, Text} from 'react-native';
import {connect} from 'react-redux';
import actions from '../Redux/Action';
class tes extends Component{
constructor(props){
super(props)
}
render(){
return(
<View>
<TextInput placeholder="phone number"
keyboardType="number-pad"/>
<TouchableOpacity onPress={this.props.onLogin}>
<Text>login</Text>
</TouchableOpacity>
</View>
)
}
}
mapStateToProps = state => {
return {
number: state.phoneNumber
}
}
mapDispatchToProps = dispatch => {
return {
onLogin: (number) => {
dispatch(actions.setLoginNumber(number))
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(tes);
这是我的商店课程
import {createStore} from 'redux';
import reducer from './Reducer';
export default createStore(reducer)
这是我的减速机课程
const reducer = (state = {
phoneNumber: '',
},action) => {
switch(action.type) {
case "LOGIN":
state = {
phoneNumber: action.payload
}
break;
}
return state;
}
export default reducer;
{/* and this one my action class */}
export default function setLoginNumber(number) {
return{
type: "LOGIN",
payload: number
};
}
提前致谢..
解决方案
我认为您没有将参数编号传递给 onLogin 函数,您将需要本地状态变量来保存该值。代码应该是这样的
import React, {Component} from 'react';
import {View, TextInput, TouchableOpacity, Text} from 'react-native';
import {connect} from 'react-redux';
import actions from '../Redux/Action';
class tes extends Component{
constructor(props){
super(props)
this.state = {
number: 0,
};
}
render(){
return(
<View>
<TextInput placeholder="phone number"
onChangeText={inputNumber => {
this.setState({ number: inputNumber })
}}
keyboardType="number-pad"/>
<TouchableOpacity onPress={() => {this.props.onLogin(this.state.number) }}>
<Text>login</Text>
</TouchableOpacity>
</View>
)
}
mapStateToProps = state => {
return {
number: state.phoneNumber
}
}
mapDispatchToProps = dispatch => {
return {
onLogin: (number) => {
dispatch(actions.setLoginNumber(number))
}
}
}
回答您的第二个问题 - 您尚未将创建的商店传递给 react-redux 的提供者组件,如下例所示
import { Provider } from 'react-redux';
import App from './App';
import store from './store';
export default class Root extends Component {
constructor() {
super();
}
render() {
return (
<Provider store={store}>
<App />
</Provider>
);
}
}
希望能帮助到你。
推荐阅读
- ios - 如何确保我的 Segue 传递了一些值并且它不会超出界限错误?
- javascript - 正则表达式选择匹配括号的单词
- javascript - Javascript - looping over dynamically created properties in object
- mysql - Laravel Eloquent - 对多个关系列求和
- google-cloud-platform - gcloud 控制台无法查看 gke 资源
- apache-spark - 在火花数据框中按列分组并计数其他列
- c++ - MFC 无可见边框/框架样式
- javascript - noUiSlider 的问题 - 无法更新关联的输入字段
- php - 正则表达式查找结果但忽略注释的 # 行
- amazon-web-services - CloudFormation 错误 [/Resources] 模板中不允许使用“null”值