2017-02-18 1 views
0

서버에 내 React App을 렌더링하고 있지만이 오류는 TypeError: match is not a function입니다. 반응 라우터 문서가 다른 현명한 말을하기 때문에이 문제를 해결하는 방법을 알지 못합니다.일치하는 항목이 명확하게 정의되어있는 이유는 무엇입니까?

var routes = require('./public/src/routes'); 
var React = require('react'); 
var renderToString = require('react-dom/server'); 
var match = require('react-router'); 
var RouterContext = require('react-router'); 

app.get('*', (req, res) => { 
    match(
    { routes, location: req.url }, 
    (err, redirectLocation, renderProps) => { 
     if (err) { 
     return res.status(500).send(err.message); 
     } 
     let markup; 
     if(renderProps) { 
     markup = renderToString(React.createElement(RoutingContext, renderProps)); 
     } 
     return res.render('index', { markup }); 
    } 
) 
}) 
+0

정확하게 '일치'가 여기에 가져 왔습니까? https://www.npmjs.com/package/react-router 문서에서 'react-router'가 함수를 내보내지 않는다는 것이 꽤 분명합니다. 또한'var match = require ('react-router'); var RouterContext = require ('react-router');'. 'require ('react-router')가 호출 될 때마다 다른 값을 반환 할 것으로 기대하고있는 것 같습니다. 그건 말이되지 않습니다. 'require ('react-router')는 항상 같은 값을 반환합니다. –

답변

2

당신은 기능하지 않고 당신이 원하는 것이 아닙니다 모듈 react-router 자체에 match를 할당하고 있습니다. match은 모듈 자체가 아닌 부분 인입니다. RouterContext도 마찬가지입니다. 당신이해야 할 것은 :

var match = require("react-router").match; 
var RouterContext = require("react-router").RouterContext; 

이 올바른 모듈을 필요로하며, 모듈에서 함수에 제대로 match를 할당합니다. RouterContext에 대해서도 마찬가지입니다. 또는 ES6의 새로운 구조 조정 과제 (동일) :

var { match, RouterContext } = require("react-router"); 
+0

@joethemow 또한 구조 조정 할당은 ES6의 새로운 기능입니다. 구성이 지원하지 않을 수 있습니다. – Li357

관련 문제