Troubleshooting
Compile errors
A compile failure shows as red text where your component would be, with the message and the line and column in your code.
No matching export in "…" for import "X"
You used a named import from a platform module. Only react and esm.sh packages support named imports; platform modules give you a single default export.
import ReactRedux from "react-redux";
const { useSelector } = ReactRedux;See Imports & rules.
Could not resolve "…"
The module is not available. The usual causes:
import _ from "lodash"
"esm.sh/lodash"
import { useX } from "./hooks"
inline it, since your code is a single file
import Image from "next/image"
use a plain <img>
some other internal module
not exposed; see the available modules in Imports & rules
The module set is fixed by the platform release. If you genuinely need something that isn't there, raise it with your Rierino contact.
Could not load remote package https://esm.sh/…
The package download failed at compile time: wrong package name, or no network access to esm.sh from your environment. Note the result is remembered for the session, so reload the page after fixing it.
Syntax errors that look wrong
TypeScript is not supported. Type annotations are a syntax error.
Backticks and
${inside a<style>{…}</style>block must be escaped, because the CSS lives in a template literal.
Compiled module does not export a valid React component as default.
The code compiled, but the default export isn't something that can be rendered.
no export default
add it
only named exports
export default MyComponent;
export default React.memo(fn)
wrap it: const Inner = React.memo(fn); export default (p) => <Inner {...p} />;
export default { MyComponent }
export the component itself, not an object
Something went wrong rendering the component.
Your component threw while rendering. The message is not shown on screen, so open the browser console for the stack trace.
The frequent causes, roughly in order:
Reading data that hasn't loaded yet.
props.data,props.itemandprops.itemListare empty on the first render. Use optional chaining everywhere.Calling an action that is
null.onSave,onNewandonDeletearenullwhen the screen is configured read-only. Null-check first.Using
props.eventsas an object. It is a function:props.events().Destructuring a context that isn't there. A context you are not actually inside returns
undefined; guard before destructuring.Giving
ConnectionWrapperorChangeWrappermore than one child. Both take exactly one element.
Nothing renders
Provide code to compile.
No code reached the component. With a stored component this also appears briefly while it loads. If it stays, the component record could not be fetched
Custom Lister Code is not defined.
The list configuration has no code and no component reference
Missing Editor: …
The editor name is neither a built-in editor nor one of your stored components
Missing Lister: …
The list type is not a known list type
Nothing at all, in a custom editor
A custom editor renders nothing when it has no code configured
An empty area that never resolves
Still compiling, or the compile threw; check the browser console
A redirect to ui not in app
The custom page's path is not in the app menu. Add it
Stale code
Compiled output is cached, but the cache always verifies your source before reusing it, so editing your code always recompiles. If you are nonetheless seeing old behaviour:
Check the component key. Two components sharing one key evict each other and recompile constantly. Custom object editors are the common case, because the fallback key is often the same for all of them. Set the key explicitly.
For a stored component, confirm you saved the record, not just the preview.
Clear the browser's stored data for the site as a last resort, then reload.
Performance
A custom list loads the whole result set. Standard page-size handling is off. On a large source, push
limitandskipthroughonFilter. See Recipes.esm.shimports dominate compile time. A large package makes the first compile slow and the component big. Prefer a platform module when one exists.Prefer a stored component in production. It is compiled once and delivered ready to run, so the browser never loads a compiler for it.
Don't fetch during render. Use
useEffectwith a correct dependency array; lists re-render on every data update.
Debugging tips
console.logfrom your component goes to the normal browser console and you can set breakpoints in your compiled component in the browser's debugger.Start with
console.log(props)at the top of your component. It tells you immediately which integration point mounted you and exactly what you were given, which is faster than reading the props reference.When data looks wrong, log
props.itemList?.list?.[0]orprops.datarather than guessing at the record shape; it varies by source.
Last updated
