Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

最外层父组件connect子组件都没有conect发现子组件里没有model 也没有dispath #519

Closed
Slngle opened this issue Jan 19, 2017 · 4 comments
Labels

Comments

@Slngle
Copy link

Slngle commented Jan 19, 2017

我的场景是这样的

router.jsx我设计成这样的

            <Router history={ history }>

                <Route path="/" getComponents={App}>
                    <IndexRedirect to="projects" />
                    <Route path="projects" getComponents={Projects}></Route>
                    <Route path="dashboard" getComponents={Dashboard}></Route>
                </Route>
                <Route path="*">
                </Route>
            </Router>

最外层的path="/" 的 App.jsx 设计成这样的

import React, {PropTypes, Component} from 'react';
import {connect} from 'dva';
import {Link} from 'dva/router';
import Header from 'components/Common/ProjectManagementNav/ProjectManagementNav'

const App = (props) => {
    console.log("props",props);
    return  (
        <div>
            <Header />
            {props.children}
        </div>
    )
}

function mapStateToProps({ management }) {
    return { management };
}

export default connect(mapStateToProps)(App);

可以看出我的父组件App有connect过

而下面我的子组件Projects (path="projects")我没有connect

import React from 'react';
import {connect} from 'dva';
import ProjectsContent from 'components/projects/projectsContent';
const Projects = (props) => {
    console.log(props);
    return (
        <ProjectsContent/>
    );

};

export default Projects;
  • 这样就导致了子组件拿不到dispath
  • 请问有什么方式能让子组件在不connect的情况下直接从父的已经connect的组件上拿到dispath呢
  • 因为我觉得父组件render之后子组件也会跟着render 只要子组件能够拿到dispath 能够通过dispath的方式改变state 触发父组件的渲染就好啊
  • 不然难道我每个routes下的文件都要connect一下么
@sorrycc
Copy link
Member

sorrycc commented Jan 19, 2017

难以阅读,请参考以下文档调整下格式:

@Slngle
Copy link
Author

Slngle commented Jan 19, 2017

整理好了

@sorrycc
Copy link
Member

sorrycc commented Jan 22, 2017

我的方式是需要用 dispatch 或者引用 model state 的 component 都 connect 一下,当然你也可以把 dispatch 传下去,或者把 dispatch action 封装成一个 function,然后把 function 传下去。

@yanmeiYang
Copy link

我的方式是需要用 dispatch 或者引用 model state 的 component 都 connect 一下,当然你也可以把 dispatch 传下去,或者把 dispatch action 封装成一个 function,然后把 function 传下去。

如果都connect一下,就会导致国际化语言切换时,子组件不能正常切换,必须使用window.location.reload()刷新整个页面。但是如果子组件不connect的话,是可以正常切换的。有什么方法可以做到不刷新页面吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants