Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React native connect函数不通过道具将操作传递给子组件_Javascript_Reactjs_React Native_Redux_React Redux - Fatal编程技术网

Javascript React native connect函数不通过道具将操作传递给子组件

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

我刚刚开始熟悉redux,并且已经读到我应该通过应用程序的父级,通过mapStateToProps,mapDispatchToProps,以及我应该能够传递动作的connect函数来传递动作创建者。但是,当我调用子组件this.props时。该函数不存在,因此似乎没有正确地传递它

我将非常感谢您的帮助

注意:为了更简洁,我省略了一些东西,比如导入和减速机

login.js:

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);