私はReact/Expressアプリケーションのサーバー側レンダリングを実装しようとしています - 実際にアプリケーションは必要に応じて動作していますが、サーバーはmatch()
に、RouterContext
には理解して解決したいと思っています。React/Express - match/RouterContextで必要な小道具 'undefined'
基本的にmatch
のコールバック関数では、引数(err, redirect, props)
はすべてundefined
と評価されています。
index.js
(エクスプレスアプリのルート):私はerr
、redirect
、およびprops
のためにconsole.log()
を投げる場合
'use strict'
require('babel-register')({
presets: ['es2015', 'react']
});
const express = require('express')
const path = require('path')
const app = express()
const React = require('react')
const reactDomServer = require('react-dom/server')
const routes = require('./src/routes.jsx')
const reactRouter = require('react-router')
let { match, RouterContext, createRoutes } = reactRouter
app.get('*', (req, res) => {
match({ routes: createRoutes(routes), location: req.url }, (err, redirect, props) => {
const appHtml = renderToString(React.createElement(RouterContext, props))
res.send(renderPage(appHtml))
})
})
だから、彼らはすべてのundefined
として戻ってきます。 、:私は、ページをリフレッシュすることができ、アクセスURLを直接(すなわち、「3000 /人/ 1234はlocalhost」) - これが私のサーバーが警告
Warning: Failed prop type: The prop `router` is marked as required in `RouterContext`, but its value is `undefined`.
in RouterContext
Warning: Failed prop type: The prop `location` is marked as required in `RouterContext`, but its value is `undefined`.
in RouterContext
Warning: Failed prop type: The prop `routes` is marked as required in `RouterContext`, but its value is `undefined`.
in RouterContext
Warning: Failed prop type: The prop `params` is marked as required in `RouterContext`, but its value is `undefined`.
in RouterContext
Warning: Failed prop type: The prop `components` is marked as required in `RouterContext`, but its value is `undefined`.
in RouterContext
Warning: Failed child context type: The child context `router` is marked as required in `RouterContext`, but its value is `undefined`.
in RouterContext
を返すようになり、私の驚きに、私のアプリがうまく動作するようですこれらの警告はそのままです。たぶん私はRouterContext
(おそらく)のニーズを理解していない。
私はいくつかの条件を設定するためにそれらの引数を使用したいので、これを解決したいと思います...これについてのガイダンスは非常に高く評価されます。
更新 私はerr
とredirect
がundefined
をデフォルト(エラーがありますしない限り、またはリダイレクト)することになっていることに気づいてきましたが、関係なく、私は何をすべきか、props
は思わないが、同様未定義に貼り付けることができます。
https://knowbody.github.io/react-router-docs/api/match.html: "3つのパラメータがすべてundefined
である場合、これは指定された場所に一致するルートが見つかりませんでした。"
しかし、私は理解していない - アプリはうまくいくようだ。何がありますか?
が 'err'はエラーがある場合を除きundefined''をデフォルトになっていることが必要です。 'props'も定義されていなければ、いくつかのエラーがあるのですか? – taha
はい - 私の質問の最後に「更新」があります。あなたはcreateRoutesを使用しないことについて正しくありましたが、ここでは適切ではありません。私はそれを理解しました、私の答えを見てください。 – skwidbreth