Comments (8)
Another option is to add a getPageData
helper so the strategy can decide whether to guard against overwriting. The page data object would be created if no page data exists yet.
const data = helpers.getPageData(pageId)
// overwrite
data.title = 'hello world'
// guard
data.title ||= 'hello world'
from vite-plugin-react-pages.
But If we let user to mutate the page data directly, the logic inside addPageData
will be bypassed. We need addPageData
to track which page data comes from which file.
from vite-plugin-react-pages.
We can use a Proxy
for that.
from vite-plugin-react-pages.
I want to keep it react setState style instead of the vue proxy style. 🤣
from vite-plugin-react-pages.
Imperative APIs are more flexible and just as understandable. No point in boxing yourself in with a rigid API like setState, unless you have a really good reason for it. React's core team came up with setState because they wanted renders to use immutable data for "time slicing" purposes. We have no need for such complexity.
from vite-plugin-react-pages.
You have a point. The fileHandler API can be used like this:
function fileHandler(file, pagesData) {
// ...
const proxy = pagesData['page1'];
proxy.runtimeData.main = filePath1;
proxy.runtimeData.dataKey2 = filePath2;
// Equivalent to proxy.runtimeData.main = filePath1
proxy.runtimeData = filePath1;
proxy.staticData.dataKey3 = 'staticData3';
proxy.staticData.title = 'title1';
// can read and overwrite
if (proxy.staticData.title) {
proxy.staticData.title = 'title1';
}
// Forbidden. Throw error
proxy.staticData = 'data';
}
A edgeCase: If handler of file1
do proxy.staticData.dataKey1 = {}
and then handler of file2
do
proxy.staticData.dataKey1.dataKey2 = 'data'
. We should treat the whole proxy.staticData.dataKey1
is owned by file1
.
In other words, we don't do deep tracking to keep it simple.
I can implement this.
from vite-plugin-react-pages.
While we could pass a pagesData
object for every file, it seems inefficient, since not every file has its own page data. So I think helpers.getPageData
makes more sense.
Maybe splitting them up into getRuntimeData
and getStaticData
is a better approach? Less proxy.runtimeData
or proxy.staticData
being repeated everywhere.
findPages: (root, { watchFiles, getRuntimeData, getStaticData }) =>
watchFiles(root, globs, (file) => {
const data = getRuntimeData(file) // Pass a file or pageId
const staticData = getStaticData('pageId')
// Edit to your heart's content.
data.contributorList = ['...']
staticData.title ||= 'Default title'
})
Though, I suppose you can always destructure...
const { data, staticData } = getPageData('id')
from vite-plugin-react-pages.
Fixed by #19
from vite-plugin-react-pages.
Related Issues (20)
- SHOW_ALL_COMPONENT_DEMOS 不是内部或外部命令,也不是可运行的程序
- How to add CodeSandbox to a demo block HOT 1
- Error: "The MDX plugin should be placed before this plugin" HOT 1
- Can the default theme adopt vitepress? HOT 1
- Pages generated from src can not access directly HOT 5
- Action Required: Fix Renovate Configuration
- how to kebabCase page url HOT 15
- Excessive indentation in generated source code when using tabs for indentation
- Incorrect image width in markdown content
- Style conflict with antd
- Render demo support show related files
- 想要配置一个不带左侧导航的首页可以实现吗 HOT 1
- Custom remark & rehype plugins for markdown? HOT 5
- node.js dependencies crashing app - fs.realpathSync HOT 1
- Can't get route / pages to work in Build HOT 5
- Doesn't work with @vitejs/plugin-react-swc, redeclaration of const RefreshRuntime HOT 2
- Support Vite 5? HOT 2
- The right anchor disappeared on some pages. HOT 2
- Bug: hmr cause runtime error when add/delete title HOT 1
- Include in an existing project HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vite-plugin-react-pages.