Aka*_*rma 1 react-native redux react-redux react-navigation
我正在使用react-redux将redux连接到我的react-native项目,但是当我使用export default connect(state => ({ count: state.count }))(Test)
method和import来反应react导航时,如图creactStackNavigator({test:Test})所示
The component for route 'test' must be a React component
import MyScreen from './MyScreen';
...
test: MyScreen,
}
Run Code Online (Sandbox Code Playgroud)
但是当我删除connect()方法时,它工作得很好
环境:
"react":16.8.4
"react-native":0.59.4
"react-redux": "7.0.2",
"redux": "4.0.1",
"react-navigation": "2.18.2",
Run Code Online (Sandbox Code Playgroud)
Test.js
import React, { Component } from 'react';
import { Text, View,Button} from 'react-native';
import {connect} from 'react-redux';
class Test extends Component {
render() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>count:{this.props.count}</Text>
<Button title="Increment" onPress={() => this.props.incrementCounter()}></Button>
<Button title="Decrement" onPress={() => this.props.decrementCounter()}></Button>
</View>
)
}
}
const mapDispatchToProps = dispatch =>({
incrementCounter: _ => dispatch({type:"INCREMENT_COUNTER"}),
incrementCounter: _ => dispatch({type:"DECREMENT_COUNTER"}),
})
export default connect(state => ({ count: state.count }),mapDispatchToProps )(Test)
Run Code Online (Sandbox Code Playgroud)
reducers.js
const INITIAL_STATE = {
count: 1
}
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case 'COUNTER_INCREMENT': {
return (Object.assign({}, { ...state, count: state.count + 1}))
}
case 'COUNTER_DECREMENT': {
return Object.assign({},{ ...state, count: state.count - 1 });
}
default: {
return state;
}
}
}
Run Code Online (Sandbox Code Playgroud)
App.js
import React, { Component } from 'react';
import { Platform, } from 'react-native';
import { Provider } from 'react-redux';
import { createStackNavigator} from 'react-navigation';
import Test from './src/screens/test';
import Screen2 from './src/screens/screen2';
import { createStore } from 'redux';
import reducers from './reducers';
const store = createStore(reducers);
const AppNavigator = createStackNavigator({
test: Test,
screen2: Screen2
}, {
headerMode: "none"
});
export default class App extends Component {
render() {
return (
<Provider store={store}>
<AppNavigator />
</Provider>
);
}
}
Run Code Online (Sandbox Code Playgroud)
预期行为:
它应该连接到redux存储并显示this.props.count值
PS:这只是我的问题的演示,实际代码类似于此演示
我最终通过将react-redux降级到5.1.1来解决我的问题,问题是在react-redux 7.0.2中,该connect()方法返回object,但是react-navigation 2.18.2假定它是我猜想的函数,因此存在类型不匹配的情况,因此我必须将react-redux降级到5.1.1,我早先在其他项目中使用过,其中connect()方法返回了react-navigation预期的功能。
PS:我有点奇怪,我用上述问题的环境设置配置了一个新项目,并且可以使用,但是不能在现有项目上使用。
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |