非同期でデータを取得して事前ロードした動的ルートをレンダリングしようとしていますthunk
。サーバ側のレンダリングをプリロードする際の動的ルートパラメータへのアクセス方法
私は、プリロードが必要なコンポーネントにstatic initialAction
メソッドを持ち、必要に応じてアクションを呼び出させます。すべてのアクションが完了し、約束が解決されると、私はルート/ページをレンダリングします。
私が持っている質問は、次のとおりです。静的関数内のルートパラメータおよび/または小道具をどのように参照するのですか?
ここには、データをプリロードするために必要とされる可能性のあるinitialAction
関数を呼び出す関連コードがあります。私のコンポーネントで
const promises = routes.reduce((promise, route) => {
if (matchPath(req.url, route) && route.component && route.component.initialAction) {
promise.push(Promise.resolve(store.dispatch(route.component.initialAction(store))))
}
return promise;
}, []);
Promise.all(promises)
.then(() => {
// Do stuff, render, etc
})
、私が(サーバーから)ストアになります静的initialAction
機能を持っている、と(クライアントから)小道具。どちらか一方の方法で、カテゴリーはredux/thunk経由で取得する必要があります。お分かりのように、私はそれを取得することができないので、サーバー経由でロードするときに動的なpermalink
小道具を渡すつもりはありません。
class Category extends Component {
static initialAction(store, props) {
let res = store !== null ? getCategory(REACT_APP_SITE_KEY) : props.getCategory(REACT_APP_SITE_KEY, props.match.params.permalink)
return res
}
componentDidMount(){
if(isEmpty(this.props.category.categories)){
Category.initialAction(null, this.props)
}
}
/* ... render, etc */
}
そして最後に、ここで私が使用していたルートは以下のとおりです。
import Home from '../components/home/Home'
import Category from '../components/Category'
import Product from '../components/product/Product'
import NotFound from '../components/NotFound'
export default [
{
path: "/",
exact: true,
component: Home
},
{
path: "/category/:permalink",
component: Category
},
{
path: "/:category/product/:permalink",
component: Product
},
{
component: NotFound
}
]
私も「標準」方法でこれをやっているが、このプロセスは、これまでときに働く完全にわかりません非動的ルート。しかし、私は基本から離れてwaaaayだと感じている:)
私はこれを試みました。あなたが説明したようにうまくいくことは本当にわかります。しかし、initialActionで新しいURLパラメータconsole.log()を試したところ、まだパラメータにアクセスできませんでした。自分のルートで質問を更新しました。一致した私のルートから判断すると、私は 'category'パラメータを利用できるはずです。 なぜ私はそうでないかもしれませんか? – Gurnzbot
initialAction内でconsole.log(props)を実行したときに表示されるものは何ですか? –
URLを印刷する必要があります。そうであれば、そこからパラメータを抽出することができます。 –