![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
provide-page
Advanced tools
Provides automatic server-side rendering and actions (regardless of whether or not client has JavaScript enabled) to React components. Use in conjunction with `provide-router`.
Provides automatic server-side rendering and actions (regardless of whether or not client has JavaScript enabled) to React components. Used in conjunction with provide-router
.
If you're using
react-router
v2 or v3, you'll want v2 of this library.
npm install provide-page --save
You can use the following actions
via propTypes
to manage the state of the document both client-side and server-side.
These optional headers will be sent to the client with SSR (server-side rendering).
An optional status code to send to the client with SSR.
Sets the document's title.
Sets the document's meta description tag.
Sets the document's meta robots tag.
Sets the document's favicon filename.
Sets the CSS filenames to be included with the document as link
elements within the head
element.
Sets the JS filenames to be included with the document as script
elements appended to the body
element.
Sets the error for the current request. This will be sent to the client.
This action is mainly used automatically in conjunction with the Form
component (see below), but you may trigger it manually if for some reason you need to do that.
This action is mainly used automatically in conjunction with the Form
component (see below), but you may trigger it manually if for some reason you need to do that. The onSubmit
function will be called after the client receives the server's response. This is useful for actions that can't be properly performed before receiving the necessary states from the server - e.g., resource creation. The Form
component will include the onSubmit
function by default if the Form
's serverSide
prop is true
.
Assigns the updates to requestSession
.
Destroys the requestSession
.
Your components may also be provided the following reduced propTypes
.
The headers sent to the client when using SSR and createMiddleware
(see below).
The status code sent to the client when using SSR and createMiddleware
(see below).
The current title of the document.
The current description of the document.
How robots should treat the document. Defaults to index,follow
.
The current favicon for the document. Defaults to /static/favicon.ico
.
The current CSS files for the document.
The current JS files for the document.
Derived from request.session
when used with createMiddleware
(see below).
Derived from request.method
when used with createMiddleware
(see below).
Derived from request.body
when used with createMiddleware
(see below).
Derived from request.headers
when used with createMiddleware
(see below).
A message you can set to be sent to the client.
Derived from request.headers.accept
(true
if indexOf('application/json') > -1
) when used with createMiddleware
(see below). If true
, the server will respond with the stores states after rendering the current URL on its end.
Derived from requestBody
and matching requestBody._formId
to the component's props.formId
when used with createMiddleware
and the Form
component (see below).
If a form element has a data-json
attribute, it will be parsed using JSON.parse
and become the element's value within formData
. This is useful for certain data structures which can't be easily represented as a single element's value.
Defaults to false
. Setting to true
will prevent automatic retrieval of states from the server upon each route change. Also used internally within the Form
component to dictate how each form is handled. Useful when you want to create components with forms that will work with both server-side rendering and client-only (or serverless) rendering. Intended to be configured as an initial state when mounting the app.
To globally disable handling of forms for automatic server-side rendering:
// src/providers/page.js
import page from 'provide-page';
// set the page provider's initial state like so;
// it will use this state when handling `Form` submissions
const ssrDisabled = true;
page.state = { ssrDisabled };
export default page;
You can also target specific forms by their formId
prop:
// src/providers/page.js
import page from 'provide-page';
// target specific forms
const ssrDisabled = {
someFormId: true,
anotherFormId: true
};
page.state = { ssrDisabled };
export default page;
Or you can set ssrDisabled
to an arbitrary configurable object used internally within your app to explicitly pass the ssrDisabled
prop to your Forms, if for example you have some providers with both SSR replication and others that talk to a 3rd party API:
// src/providers/page.js
import page from 'provide-page';
// target specific forms
const ssrDisabled = {
someThirdPartyProvider: true,
anotherThirdPartyProvider: true
};
page.state = { ssrDisabled };
export default page;
// src/components/SomeComponent.js
import React from 'react';
import PropTypes from 'prop-types';
import { Form } from 'provide-page';
const SomeComponent = ({ formId, ssrDisabled }) => (
<Form
formId={formId}
ssrDisabled={Boolean(ssrDisabled.someThirdPartyProvider)}
onSubmit={(event, formData) => console.log(formData)}
>
<input type="text" name="someInput" />
<input type="submit" value="Submit" />
</Form>
);
SomeComponent.propTypes = {
formId: PropTypes.string.isRequired,
ssrDisabled: PropTypes.object.isRequired
};
SomeComponent.defaultProps = {
formId: 'SomeComponent'
};
export default SomeComponent;
Or you can explicitly pass the ssrDisabled
prop to the Form
(not usually recommended as it might prevent configuration/reusability):
// src/components/SomeComponent.js
import React from 'react';
import PropTypes from 'prop-types';
import { Form } from 'provide-page';
const SomeComponent = ({ formId }) => (
<Form
formId={formId}
ssrDisabled={true}
onSubmit={(event, formData) => console.log(formData)}
>
<input type="text" name="someInput" />
<input type="submit" value="Submit" />
</Form>
);
SomeComponent.propTypes = {
formId: PropTypes.string.isRequired
};
SomeComponent.defaultProps = {
formId: 'SomeComponent'
};
export default SomeComponent;
A simple wrapper around <form { ...props } />
. Combined with createMiddleware
(see below), it intercepts the onSubmit
event and allows all of the resulting actions to occur on the server, whether or not JS is enabled. If JS is enabled and the ssrDisabled
prop is falsy, it will trigger the action on the server via XMLHttpRequest
. All you need is a formId
prop combined with an onSubmit
prop that accepts formData
as a second argument. Include a serverSide
prop if the client needs states from the server before it can continue. The formId
prop should exist within both the Form
instance and the component instance rendering the form. See Lumbur's UserLogIn
component for a full example.
Returns a function that can be used as express
(or other) middleware and will do the following for you, server-side:
Automatically render the state of the app depending on some defaultProps
({ providers }
), the request
({ method: requestMethod, body: requestBody, headers: requestHeaders }
), and optional formData
(see the Form
component above).
Respond with a full document string describing the current page - i.e., headers, status code, title, meta, favicon, js files, and css files - all controlled by your React components.
Automatically wait for asynchronous actions
before rendering.
When used with the Form
component (above), it will automatically trigger actions
on the server regardless of whether or not JS is enabled.
Automatically redirect clients with JS disabled to a new URL when it changes.
Automatically optionally send a 408 (timeout) status when a request takes too long.
The options
object passed to createMiddleware
should take the following shape:
Extended to contain info about the request and then passed to your renderToString
function. See lumbur/src/defaultProps.js
for a full example.
This function should typically use react-dom/server
's renderToString
method under the hood to render your app to a string. See lumbur/src/renderAppToString.js
for a full example.
Optional function that returns the string representation of the entire document. The states
and clientStates
objects come form the getStates
and getClientStates
functions below. See defaultRenderDocumentToString.js
for an example.
Optional function that should return an object containing provider keys and their states, ultimately passed to both renderToString
and renderDocumentToString
. Your current providers' stores' states will be passed to this function. See lumbur/src/middleware.js
for a full example where we concatenate the selected theme's files with the cssFiles
and jsFiles
reducers so that they're included as link
and script
tags when the document string is rendered.
Note: The middleware will look for a special optional clientStateKeys
array on each provider which is used for determining which reducer keys (i.e., stores' states) to send to the client upon each request. The page
provider defaults to only the requestSession
and requestError
keys. The router
provider defaults to no keys. Every other provider defaults to all keys. See lumbur/src/renderAppToString.js
for an example.
Defaults to 20. The first render initializes all of the necessary providers, and a second render may occur if the providers' replicators have changed the initial state. After everything is fully initialized, if a request.body
exists, it will be treated as formData
and the submitRequest
action is dispatched, which typically subsequently triggers other actions and will continue rerendering until either stores' states have stopped changing or maxRenders
is reached.
Default to 2000 (milliseconds). Sends a 408 status code if this timeout is reached. Setting this to 0 will disable it.
See the following modules within Lumbur:
Passing hot reloadable middleware to express
.
Passing production-ready, bundled middleware to express
.
Using createMiddleware
to create middleware specific to the app.
FAQs
Provides automatic server-side rendering and actions (regardless of whether or not client has JavaScript enabled) to React components. Use in conjunction with `provide-router`.
The npm package provide-page receives a total of 9 weekly downloads. As such, provide-page popularity was classified as not popular.
We found that provide-page demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.