gpt4 book ai didi

javascript - 路由更改时 Mithril 组件不更新

转载 作者:行者123 更新时间:2023-12-03 07:11:30 33 4
gpt4 key购买 nike

我正在使用 Mithril.js 创建我的个人网站/博客作为单页应用程序。我网站上的所有页面和博文都是使用 PagePost 组件呈现的,并且根据 :slug 加载正确的页面网址。

我遇到的问题是每当我尝试在页面之间切换时,页面内容都不会更新。在页面和帖子 之间切换是可行的,因为我在PagePost 组件之间交替。但是当我尝试连续两次使用同一个组件时,从一个页面到另一个页面,它不会更新网页。

m.route(document.body, '/', {
// `Home` is a wrapper around `Page`
// so I can route to `/` instead of `/home`
'/': Home,
'/:slug': Page,
'/blog/:slug': Post
});
const Home = {
view() {
return m(Page, { slug: 'home' });
}
};

这里是 Page 组件(Post 组件非常相似)。两个组件都正确呈现。

const Page = {
content: {},
oninit(vnode) {
m.request({
method: 'GET',
url: 'content.json',
}).then((response) => {
Page.content = response.pages[vnode.attrs.slug];
});
},
view() {
if (Page.content) {
return [
m('#content', m.trust(Page.content.body))
];
}
}
};

为什么 Mithril 没有意识到 slug 发生了变化?

最佳答案

docs page for m.route有适合您的解决方案。

When a user navigates from a parameterized route to the same route with a different parameter (e.g. going from /page/1 to /page/2 given a route /page/:id, the component would not be recreated from scratch since both routes resolve to the same component, and thus result in a virtual dom in-place diff. This has the side-effect of triggering the onupdate hook, rather than oninit/oncreate. However, it's relatively common for a developer to want to synchronize the recreation of the component to the route change event.

关于javascript - 路由更改时 Mithril 组件不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42261027/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com