美文网首页
React相关

React相关

作者: wuzinong | 来源:发表于2019-03-21 11:13 被阅读0次

1.React 多层级 Router

 1.webpack中output下面的publicPath和devServer的publicPath一致

//publicPath: '/'

  2.React Router v4中设置多级路由

//  <Route path="/settings/:direction(profilesettings|notificationsettings)" comp//onent={Settings}/>

  <Provider store={store}>

                <BrowserRouter>

                    <Layout>

                        <Switch>

                            <Route exact path="/" component={Home} />

                            <Route path="/home" component={Home} />

                            <Route path="/about" component={About} />

                            <Route path="/user-profile" component={UserProfile} />

                            <Route path="/my-profile" component={MyProfile} />

                            <Route path="/settings/:direction(profilesettings|notificationsettings)" component={Settings}/>

                            <Route path="/not-found" component={NotFound} />

                            <Redirect exact path="*" to="/not-found"></Redirect>

                        </Switch>

                    </Layout>

                </BrowserRouter>

            </Provider>

3.在具体组件中

  1)可以render的时候return一个Switch,其中匹配具体路由来加载,但是如果类似tab类的组件的话不好控制状态

      <Switch>

        <Route exact path="/settings/profilesettings" render={()=><div>profile</div>}/>

        <Route exact path="/settings/notificationsettings" render={()=><div>test</div>}/>

    </Switch>

  2)通过参数来判断

    2.1)这里需要引用withRouter来获取路由信息

      import { withRouter} from 'react-router-dom';

      export default withRouter(SettingsComponent)

    2.2)通过this.props.match.params来获取然后根据不同逻辑处理

    e.g:

      render(){

        let page = (this.props.match.params==="pageA")?1:2;

        let comp = page===1?<ProfileSettingsForm/>:<NotificationForm/>

        <div className="common-form">

                <Link to="/home" className="form-back">Back</Link>

                <div className="inner-form">

                    <NavBar>               

                        <comp/>

                    </NavBar>

                </div>

        </div>;

      }

2.关于子组件获取dispatch,通过调用reducer中的方法,将方法传递给子组件进行调用

export function mapStateToProps(storeState: StoreState) {

    return {

        userInfo: storeState.userInfo

    }

}

export const mapDispatchToProps = {

    getUserProfile,

    updateUserProfile

}

mapDispatchToProps可以是一个对象也可以是一个funcion,上面是传递一个对象,把方法放里面,此案传递function:

const mapDispatchToProps = (dispatch,props)=>{

    const initList = ()=>{

        dispatch(getData());

    }

    const filterList = (name)=>{

        dispatch(filterData(name));

    }

    是否可以将dispatch传递过去给子组件调用?

    return {

        initList,

        filterList

    }

}

const mapStateToProps = (state)=>{

    const {listData} = state.ListReducer;

    return {

        listData:listData

    }

}

const List = connect(

    mapStateToProps,

    mapDispatchToProps

)(ListComponent);

3.setState

相关文章

网友评论

      本文标题:React相关

      本文链接:https://www.haomeiwen.com/subject/guqqvqtx.html