我一直在单独的.js文件中编写javascript函数.在我的上一个项目中,javascript文件的数量更多,因此页面加载速度较慢,因为请求数量更多.因此,出于实验目的,我使用.php扩展名转换了几个.js文件,并使用include语句添加它们.这样加载时间性能更好.在.php文件中编写javascript有很多好处.我可以访问php变量并轻松将它们传递给javascript.
我的疑问是,在.php文件中编写javascript然后包含它们有什么缺点吗?
我的理解是,当页面加载时,它调用javascript文件并并行执行php部分.所以我们编写onload函数.
我正在研究React-Express-Node应用程序并专注于SPA.我正在使用react-router.
我的server.js文件看起来像这样(只有路由部分):
app.use(function(req, res, next) {
Router.run(routes,function(Handler, state) {
var ele = React.createElement(Handler);
res.render(path.join(__dirname + '/public/index'), {html: html});
});
next();
});
Run Code Online (Sandbox Code Playgroud)
而routes文件有这个代码(粘贴主要部分):
module.exports = (
<Route name="app" path="/" handler={Main}>
<Route name="about" path="about" handler={About}/>
<Route name="about/id" path="about/:id" handler={About}/>
<DefaultRoute name="default" handler={Home} />
</Route>
);
Run Code Online (Sandbox Code Playgroud)
而client.js看起来像这样:
Router.run(routes, function(Root,state){
React.render(<Root />,document.getElementById('app'));
});
Run Code Online (Sandbox Code Playgroud)
此设置正常,没有任何问题.
现在,我想使用History API pushstate,以便我可以拥有更好的URL并摆脱#.为此,我Router.HistoryLocation在client.js中添加了第二个参数并且它可以工作,它会删除#并提供干净的URL.但是,我的页面刷新了我不想要的东西.
我已经搜索过这个并找到了几个解决方案,但他们要么使用Flux,要么使用自定义路由器.我肯定错过了一些与国家有关但却无法弄清楚的事情.有人能指出我正确的方向吗?
type Tail<T extends any[]> = ((...t: T) => void) extends ((
h: any,
...r: infer R
) => void)
? R
: never;
type DeepOmit<T, Path extends string[]> = T extends object
? {
0: Omit<T, Path[0]>;
1: {
[K in keyof T]: K extends Path[0] ? DeepOmit<T[K], Tail<Path>> : T[K];
};
}[Path['length'] extends 1 ? 0 : 1]
: T;
Run Code Online (Sandbox Code Playgroud)
我有上面的类型,效果很好。我已经这样测试过:
type A = DeepOmit<{ a: { b: { c: 1 } } }, ['a', 'b', 'c']>;
// { …Run Code Online (Sandbox Code Playgroud)