Javascript React native connect函数不通过道具将操作传递给子组件
我刚刚开始熟悉redux,并且已经读到我应该通过应用程序的父级,通过mapStateToProps,mapDispatchToProps,以及我应该能够传递动作的connect函数来传递动作创建者。但是,当我调用子组件this.props时。该函数不存在,因此似乎没有正确地传递它 我将非常感谢您的帮助 注意:为了更简洁,我省略了一些东西,比如导入和减速机 login.js:Javascript React native connect函数不通过道具将操作传递给子组件,javascript,reactjs,react-native,redux,react-redux,Javascript,Reactjs,React Native,Redux,React Redux,我刚刚开始熟悉redux,并且已经读到我应该通过应用程序的父级,通过mapStateToProps,mapDispatchToProps,以及我应该能够传递动作的connect函数来传递动作创建者。但是,当我调用子组件this.props时。该函数不存在,因此似乎没有正确地传递它 我将非常感谢您的帮助 注意:为了更简洁,我省略了一些东西,比如导入和减速机 login.js: export function login(token, id) { console.log('login actio
export function login(token, id) {
console.log('login action');
return {
type: 'LOG_IN',
token,
id,
};
}
index.ios.js:
import * as actionCreators from './actions/login'
const store = createStore(RootReducer, undefined, autoRehydrate());
persistStore(store);
class App extends Component {
constructor(props) {
super(props);
state = {
token: '',
id: '',
store: store,
};
}
render() {
return (
<Provider store={ state.store }>
<View style = {styles.container}>
<LoginView/>
</View>
</Provider>
);
}
}
AppRegistry.registerComponent('App', () => App);
function mapStateToProps(state) {
return {
token: state.token,
id: state.id
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({actionCreators}, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
基本上,当直接在上面调用onLogin函数时,它表示this.props.login不是一个函数。原因是什么?我如何修复它?您正在连接应用程序组件,因此将有this.props.onLogin。但是,您不能将onLogin作为道具传递给。您需要渲染或连接LoginView,并将onLogin作为该组件连接的一部分包含在内。此行:
return bindActionCreators({actionCreators}, dispatch);
应该是:
return bindActionCreators(actionCreators, dispatch);
actionCreators已经是一个对象。通过将它传递到另一组大括号中,它被解释为ES6速记属性名称的语法。您实际传递的是一个新对象,如下所示:
{
actionCreators: {
login: ... // your action is buried here
}
}
// ^^ which would get mapped to this.props.actionsCreators.login (wrong)
似乎在thase days使用的组件中,redux connect处于react native to bind状态
import {connect} from "react-redux";
...
class HomeScreen extends React.Component {
// do your things..
constructor(props) {
super(props);
console.log(this.props);
}
render () {
....
}
}
const mapStateToProps = state => {
return { user: state.user };
};
export default connect(mapStateToProps)(HomeScreen);
谢谢你的回复。我在实现时使用了这个指南:它使我听起来好像不需要像您所说的那样将它作为道具传递给组件。不是这样吗?是的,那篇文章的措辞很糟糕。React组件不能神奇地获得道具——它们必须从某处传下来。connect生成一个包装器组件,将数据道具和函数道具向下传递到实际组件。是的,可以将onLogin方法从App显式传递到LoginView,或者直接连接LoginView并在mapDispatch中为其提供onLogin。另外,我在网站上保留了大量链接,这些链接指向关于React、Redux和相关主题的高质量教程和文章。从那里链接了很多好的信息和例子。非常感谢您的帮助和资源!我相信它会派上用场的。谢谢你的回复。不幸的是,这并没有修复错误。你还有其他建议吗?
import {connect} from "react-redux";
...
class HomeScreen extends React.Component {
// do your things..
constructor(props) {
super(props);
console.log(this.props);
}
render () {
....
}
}
const mapStateToProps = state => {
return { user: state.user };
};
export default connect(mapStateToProps)(HomeScreen);