-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathindex.json
More file actions
1 lines (1 loc) · 20.6 KB
/
index.json
File metadata and controls
1 lines (1 loc) · 20.6 KB
1
{"instances":{"application":{"persistent":false},"Header/0-0-0-0":{"expanded":false,"persistent":false,"locale":"en-US","i18n":{"home":{"title":"Nullstack","href":"/"},"links":[{"title":"What is Nullstack?","href":"/what-is-nullstack"},{"title":"Documentation","href":"/getting-started"},{"title":"Examples","href":"/examples"},{"title":"Contributors","href":"/contributors"},{"title":"F.A.Q","href":"/frequently-asked-questions"},{"title":"Waifu","href":"/waifu"}],"menu":{"title":"Toggle Menu"},"action":{"title":"Get Started","href":"/getting-started"},"search":{"title":"Search [ctrl + k]"},"language":{"title":"Português","href":"/pt-br"},"mode":{"dark":"Night Mode","light":"Day Mode"}}},"Article/0-0-0-18/full-stack-lifecycle":{"title":"Full Stack Lifecycle","html":"<p>Lifecycle methods are special named functions that you can declare in the class.<\\/p>\n<p>Each lifecycle method runs in a specific order in a queue so it's guaranteed that all components initiated in that cycle will be prepared before the first one is initiated.<\\/p>\n<h2 id=\"prepare\"><a href=\"#prepare\">Prepare<\\/a><\\/h2><p>This method is blocking and runs before the first time the component is rendered.<\\/p>\n<p>You can use this function to set the state that the user will see before things are loaded.<\\/p>\n<p>If the user is entering from this route <code>prepare<\\/code> will run in the server before Nullstack <a href=\"/server-side-rendering\">server-side renders<\\/a> your application.<\\/p>\n<p>If the user is navigating from another route this method will run in the client.<\\/p>\n<pre><code class=\"language-jsx\"><span class=\"token keyword\">import<\\/span> Nullstack <span class=\"token keyword\">from<\\/span> <span class=\"token string\">'nullstack'<\\/span><span class=\"token punctuation\">;<\\/span>\n\n<span class=\"token keyword\">class<\\/span> <span class=\"token class-name\">Component<\\/span> <span class=\"token keyword\">extends<\\/span> <span class=\"token class-name\">Nullstack<\\/span> <span class=\"token punctuation\">{<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n <span class=\"token function\">prepare<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>date <span class=\"token operator\">=<\\/span> <span class=\"token keyword\">new<\\/span> <span class=\"token class-name\">Date<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n<span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token keyword\">export<\\/span> <span class=\"token keyword\">default<\\/span> Component<span class=\"token punctuation\">;<\\/span>\n<\\/code><\\/pre>\n<h2 id=\"initiate\"><a href=\"#initiate\">Initiate<\\/a><\\/h2><p>This method can be async and runs right after the component is prepared and rendered for the first time.<\\/p>\n<p>You can use this function to invoke another server function and load the data to present the page.<\\/p>\n<p>If the user is entering from this route <code>initiate<\\/code> will run in the server.<\\/p>\n<p>Nullstack will wait till the promise is resolved and then finally generate the HTML that will be served.<\\/p>\n<p>If the user is navigating from another route this method will run in the client.<\\/p>\n<p>After this method promise is fulfilled <code>this.initiated<\\/code> will be set to true<\\/p>\n<pre><code class=\"language-jsx\"><span class=\"token keyword\">import<\\/span> Nullstack <span class=\"token keyword\">from<\\/span> <span class=\"token string\">'nullstack'<\\/span><span class=\"token punctuation\">;<\\/span>\n\n<span class=\"token keyword\">class<\\/span> <span class=\"token class-name\">Component<\\/span> <span class=\"token keyword\">extends<\\/span> <span class=\"token class-name\">Nullstack<\\/span> <span class=\"token punctuation\">{<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n <span class=\"token keyword\">async<\\/span> <span class=\"token function\">initiate<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>task <span class=\"token operator\">=<\\/span> <span class=\"token keyword\">await<\\/span> <span class=\"token function\">getTaskByDay<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">{<\\/span>\n <span class=\"token literal-property property\">day<\\/span><span class=\"token operator\">:<\\/span> <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>date\n <span class=\"token punctuation\">}<\\/span><span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token function\">render<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">if<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token operator\">!<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>initiated<span class=\"token punctuation\">)<\\/span> <span class=\"token keyword\">return<\\/span> <span class=\"token boolean\">false<\\/span>\n <span class=\"token keyword\">return<\\/span> <span class=\"token punctuation\">(<\\/span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\"><<\\/span>p<\\/span><span class=\"token punctuation\">><\\/span><\\/span> <span class=\"token punctuation\">{<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>task<span class=\"token punctuation\">.<\\/span>description<span class=\"token punctuation\">}<\\/span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\"></<\\/span>p<\\/span><span class=\"token punctuation\">><\\/span><\\/span>\n <span class=\"token punctuation\">)<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token keyword\">export<\\/span> <span class=\"token keyword\">default<\\/span> Component<span class=\"token punctuation\">;<\\/span>\n<\\/code><\\/pre>\n<blockquote>\n<p>✨ Learn more about <a href=\"/server-functions\">server functions<\\/a>.<\\/p>\n<\\/blockquote>\n<h2 id=\"launch\"><a href=\"#launch\">Launch<\\/a><\\/h2><p>Runs before pre-rendering and at each awakening.<\\/p>\n<p>You can update the component with things that doesn't require data fetching operations.<\\/p>\n<blockquote>\n<p>✨ Use this lifecycle to setup Meta tags.<\\/p>\n<\\/blockquote>\n<pre><code class=\"language-jsx\"><span class=\"token keyword\">import<\\/span> Nullstack <span class=\"token keyword\">from<\\/span> <span class=\"token string\">'nullstack'<\\/span><span class=\"token punctuation\">;<\\/span>\n\n<span class=\"token keyword\">class<\\/span> <span class=\"token class-name\">Component<\\/span> <span class=\"token keyword\">extends<\\/span> <span class=\"token class-name\">Nullstack<\\/span> <span class=\"token punctuation\">{<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n <span class=\"token function\">launch<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token parameter\"><span class=\"token punctuation\">{<\\/span> page <span class=\"token punctuation\">}<\\/span><\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n page<span class=\"token punctuation\">.<\\/span>title <span class=\"token operator\">=<\\/span> <span class=\"token string\">'Very good title that considers SEO'<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n<span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token keyword\">export<\\/span> <span class=\"token keyword\">default<\\/span> Component<span class=\"token punctuation\">;<\\/span>\n<\\/code><\\/pre>\n<h2 id=\"hydrate\"><a href=\"#hydrate\">Hydrate<\\/a><\\/h2><p>This method is async and will only run in the client.<\\/p>\n<p>This method will always run no matter which environment started the component.<\\/p>\n<p>This is a good place to trigger dependencies that manipulate the dom or can only run on the client-side.<\\/p>\n<p>After this method promise is fulfilled <code>this.hydrated<\\/code> will be set to true<\\/p>\n<pre><code class=\"language-jsx\"><span class=\"token keyword\">import<\\/span> Nullstack <span class=\"token keyword\">from<\\/span> <span class=\"token string\">'nullstack'<\\/span><span class=\"token punctuation\">;<\\/span>\n\n<span class=\"token keyword\">class<\\/span> <span class=\"token class-name\">Component<\\/span> <span class=\"token keyword\">extends<\\/span> <span class=\"token class-name\">Nullstack<\\/span> <span class=\"token punctuation\">{<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n <span class=\"token keyword\">async<\\/span> <span class=\"token function\">hydrate<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>timer <span class=\"token operator\">=<\\/span> <span class=\"token function\">setInterval<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token operator\">=><\\/span> <span class=\"token punctuation\">{<\\/span>\n console<span class=\"token punctuation\">.<\\/span><span class=\"token function\">log<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>date<span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token punctuation\">}<\\/span><span class=\"token punctuation\">,<\\/span> <span class=\"token number\">1000<\\/span><span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token function\">render<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">if<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token operator\">!<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>hydrated<span class=\"token punctuation\">)<\\/span> <span class=\"token keyword\">return<\\/span> <span class=\"token boolean\">false<\\/span>\n <span class=\"token keyword\">return<\\/span> <span class=\"token punctuation\">(<\\/span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\"><<\\/span>p<\\/span><span class=\"token punctuation\">><\\/span><\\/span> timer id<span class=\"token operator\">:<\\/span> <span class=\"token punctuation\">{<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>timer<span class=\"token punctuation\">}<\\/span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\"></<\\/span>p<\\/span><span class=\"token punctuation\">><\\/span><\\/span>\n <span class=\"token punctuation\">)<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token keyword\">export<\\/span> <span class=\"token keyword\">default<\\/span> Component<span class=\"token punctuation\">;<\\/span>\n<\\/code><\\/pre>\n<h2 id=\"update\"><a href=\"#update\">Update<\\/a><\\/h2><p>This method is async and will only run in the client.<\\/p>\n<p>This method runs on every component anytime the application state changes.<\\/p>\n<blockquote>\n<p>🔥 Be careful not to cause infinite loopings when mutating state inside <code>update<\\/code>.<\\/p>\n<\\/blockquote>\n<p>This will run right before rendering but will not block the rendering queue.<\\/p>\n<p>The <code>update<\\/code> function will not start running until the application is rendered after the <code>initiate<\\/code>.<\\/p>\n<pre><code class=\"language-jsx\"><span class=\"token keyword\">import<\\/span> Nullstack <span class=\"token keyword\">from<\\/span> <span class=\"token string\">'nullstack'<\\/span><span class=\"token punctuation\">;<\\/span>\n\n<span class=\"token keyword\">class<\\/span> <span class=\"token class-name\">Component<\\/span> <span class=\"token keyword\">extends<\\/span> <span class=\"token class-name\">Nullstack<\\/span> <span class=\"token punctuation\">{<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n <span class=\"token keyword\">async<\\/span> <span class=\"token function\">update<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">const<\\/span> today <span class=\"token operator\">=<\\/span> <span class=\"token keyword\">new<\\/span> <span class=\"token class-name\">Date<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token keyword\">if<\\/span><span class=\"token punctuation\">(<\\/span>today<span class=\"token punctuation\">.<\\/span><span class=\"token function\">getDay<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token operator\">!=<\\/span> <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>date<span class=\"token punctuation\">.<\\/span><span class=\"token function\">getDay<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>date <span class=\"token operator\">=<\\/span> today<span class=\"token punctuation\">;<\\/span>\n <span class=\"token keyword\">await<\\/span> <span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span><span class=\"token function\">initiate<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n<span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token keyword\">export<\\/span> <span class=\"token keyword\">default<\\/span> Component<span class=\"token punctuation\">;<\\/span>\n<\\/code><\\/pre>\n<blockquote>\n<p>✨ Lifecycle methods have no special side effects, you can call them manually without causing problems.<\\/p>\n<\\/blockquote>\n<h2 id=\"terminate\"><a href=\"#terminate\">Terminate<\\/a><\\/h2><p>This method is async and will only run in the client.<\\/p>\n<p>This method will run after your component leaves the DOM.<\\/p>\n<p>This is the place to clean up whatever you set up in the <code>hydrate<\\/code> method.<\\/p>\n<p>The instance will be garbage collected after the <code>Promise<\\/code> is resolved.<\\/p>\n<p>After this method promise is fulfilled <code>this.terminated<\\/code> will be set to true which is useful in the case of <a href=\"/persistent-components\">persistent components<\\/a><\\/p>\n<pre><code class=\"language-jsx\"><span class=\"token keyword\">import<\\/span> Nullstack <span class=\"token keyword\">from<\\/span> <span class=\"token string\">'nullstack'<\\/span><span class=\"token punctuation\">;<\\/span>\n\n<span class=\"token keyword\">class<\\/span> <span class=\"token class-name\">Component<\\/span> <span class=\"token keyword\">extends<\\/span> <span class=\"token class-name\">Nullstack<\\/span> <span class=\"token punctuation\">{<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n <span class=\"token keyword\">async<\\/span> <span class=\"token function\">terminate<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token function\">clearInterval<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>timer<span class=\"token punctuation\">)<\\/span><span class=\"token punctuation\">;<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token function\">executeBackgroundTask<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token keyword\">if<\\/span><span class=\"token punctuation\">(<\\/span><span class=\"token operator\">!<\\/span><span class=\"token keyword\">this<\\/span><span class=\"token punctuation\">.<\\/span>terminated<span class=\"token punctuation\">)<\\/span> <span class=\"token punctuation\">{<\\/span>\n <span class=\"token comment\">// ...<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n <span class=\"token punctuation\">}<\\/span>\n\n <span class=\"token comment\">// ...<\\/span>\n\n<span class=\"token punctuation\">}<\\/span>\n\n<span class=\"token keyword\">export<\\/span> <span class=\"token keyword\">default<\\/span> Component<span class=\"token punctuation\">;<\\/span>\n<\\/code><\\/pre>\n","persistent":true,"locale":"en-US","i18n":{"lead":"Have any questions or suggestions?","cta":"Join our Discord","next":"Next Step","learn":"Learn more about"},"description":"Lifecycle methods are special named functions that you can declare in the class.","topics":[{"title":"About Nullstack","links":[{"title":"What is Nullstack?","href":"/what-is-nullstack"},{"title":"Getting started","href":"/getting-started"}]},{"title":"Core Features","links":[{"title":"Stateless Components","href":"/stateless-components"},{"title":"Stateful components","href":"/stateful-components"},{"title":"Full stack lifecycle","href":"/full-stack-lifecycle"},{"title":"Server functions","href":"/server-functions"},{"title":"Context","href":"/context"},{"title":"Two-way bindings","href":"/two-way-bindings"},{"title":"JSX elements","href":"/jsx-elements"},{"title":"Refs","href":"/refs"},{"title":"Styles","href":"/styles"},{"title":"Persistent Components","href":"/persistent-components"}]},{"title":"Context Keys","links":[{"title":"Routes and params","href":"/routes-and-params"},{"title":"Context data","href":"/context-data"},{"title":"Context instances","href":"/context-instances"},{"title":"Context environment","href":"/context-environment"},{"title":"Context page","href":"/context-page"},{"title":"Context project","href":"/context-project"},{"title":"Context settings","href":"/context-settings"},{"title":"Context secrets","href":"/context-secrets"},{"title":"Server request and response","href":"/server-request-and-response"},{"title":"Service Worker","href":"/service-worker"}]},{"title":"Advanced concepts","links":[{"title":"Proxy","href":"/proxy"},{"title":"Application Startup","href":"/application-startup"},{"title":"Script runner","href":"/script-runner"},{"title":"How to customize Webpack","href":"/how-to-customize-webpack"},{"title":"Transpilation and Security","href":"/transpilation-and-security"},{"title":"TypeScript","href":"/typescript"}]},{"title":"Build Modes","links":[{"title":"Server-side rendering","href":"/server-side-rendering"},{"title":"Static site generation","href":"/static-site-generation"},{"title":"Single page applications","href":"/single-page-applications"}]},{"title":"Other","links":[{"title":"Nullstack Logo","href":"/nullstack-logo"},{"title":"How to deploy","href":"/how-to-deploy-a-nullstack-application"}]}]},"GoogleAnalytics/0-0-0-19":{"persistent":false},"Loader/0-0-0-21":{"persistent":false},"Footer/0-0-0-22":{"persistent":false,"locale":"en-US","i18n":{"links":[{"title":"YouTube","href":"https://www.youtube.com/channel/UCUNPaxoppH3lu6JTrUX78Ww"},{"title":"Twitter","href":"https://twitter.com/nullstackapp"},{"title":"GitHub","href":"https://github.com/nullstack"}],"star":{"story":"Want to show your love and help us spread the word?","action":"Leave a star on GitHub"}}}},"page":{"image":"/image-1200x630.png","status":200,"locale":"en-US","title":"Full Stack Lifecycle - Nullstack","description":"Lifecycle methods are special named functions that you can declare in the class."}}