これが私の目標です。要素を表示する前に、一致した URL の有効性をチェックする複合コンポーネントを作成したいと考えていますchildren
。それ以外の場合は、共通コンポーネントを返してエラー メッセージを表示します。
だからここに私の「デコレータ」のコードがあります:
const EnforceUrlValidation = (test, children) => {
const fn = ({ match }) => {
if (! test( match )) {
return ( <InvalidUrlContainer /> );
}
return ({children});
}
return fn;
}
私のルーターでの使用方法は次のとおりです。
const WelcomePage = EnforceUrlValidation(
(match) => {
const articleId = match.params.articleId;
return articleId && isValidarticleId(articleId);
}
, <WelcomeContainer/>
)
...
<Routers>
<Switch>
<Route
path="/:articleId"
component={WelcomePage}
/>
...
</Routers>
私が今抱えている問題は、match
オブジェクトをchildren
内部に渡したいということですEnforceUrlValidation
。どうすればそれを達成できますか?
試行 1 :
const EnforceUrlValidation = (test, children) => {
const fn = ({ match }) => {
if (! test( match )) {
return ( <InvalidUrlContainer /> );
}
return (<children match={match} />);
}
return fn;
}
このchildren
場合、 はレンダリングされません。
試行 2 :
const EnforceUrlValidation = (test, children) => {
const fn = ({ match }) => {
if (! test( match )) {
return ( <InvalidUrlContainer /> );
}
return (
<div match={match} >{children} </div>
)
}
return fn;
}
div
サポートしていないため失敗しますmatch