反应this.props.params undefined

Paw*_*aca 11 javascript reactjs react-router

我有传递ID到我的页面与产品的问题,我尝试eveything和搜索答案,但它仍然无法正常工作.

这是我的index.js:

import React from "react";
import {render} from "react-dom";
import {Router, Route, IndexRoute, hashHistory} from "react-router";

import {Menu} from './components/Menu';
import {MainPage} from './components/MainPage';
import {DetailsProduct} from './components/DetailsProduct';

class App extends React.Component{

    render(){
        return(
        <Router history={hashHistory}>
            {/* <IndexRoute component={Menu}></IndexRoute> */}
            <Route path="/" component={()=>(<div><Menu/><MainPage/></div>)}></Route>
            <Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
        </Router>
        )
    }
}

render(<App/>, window.document.getElementById("app"));
Run Code Online (Sandbox Code Playgroud)

和DetalisProduct(页面:http:// localhost:8080 /#/ product/1)

import React from "react";    
export class DetailsProduct extends React.Component{

    render(){
        console.log(this.props.params); <-- this is undefined

        return(
            <h1>Product</h1>
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 17

我用的时候也遇到了同样的问题this.props.params.id.

但是当我试图放入console.log(this.props)我传递id的组件时,它会在match对象中显示我的id,所以使用:

this.props.match.params.id
Run Code Online (Sandbox Code Playgroud)

获取id(注意添加match).

  • 这对我也有用......有谁知道为什么? (4认同)
  • 碰到为什么^有效?这是基于React Router版本吗? (2认同)

Faw*_*waz 6

替换为:

<Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route>
Run Code Online (Sandbox Code Playgroud)

与:

<Route path={"product/:id"} component={DetailsProduct}></Route>
Run Code Online (Sandbox Code Playgroud)


Gle*_*son 5

对我来说,我使用的是render方法,this.props.matchundefined在渲染组件中找到它。这是我的解决方案,您必须通过props

this.props.matchundefined用于:

<Route path='/users/:id' render={() => <UserDetail/>}/>
Run Code Online (Sandbox Code Playgroud)

改为这样做:

<Route path='/users/:id' render={(props) => <UserDetail {...props}/>}/>
Run Code Online (Sandbox Code Playgroud)

https://reacttraining.com/react-router/web/api/Route/render-func


Paw*_*aca 0

我用

import { Router, Route, browserHistory, IndexRoute} from 'react-router'
Run Code Online (Sandbox Code Playgroud)

import {syncHistoryWithStore, routerReducer} from 'react-router-redux'
Run Code Online (Sandbox Code Playgroud)

然后我可以通过以下方式获取idthis.props.params.id