Renaming exported custom attributes
Similar to how it renames exported components and props, DevLink now renames or filters out exported custom attributes to ensure that the exported React code is valid.
- HTML5 standard names such as
tabindexandmaxlengthare capitalized according to React standards, in this exampletabIndexandmaxLength - Attributes that have a React equivalent, such as
classandfor, are converted to the React equivalent, in this exampleclassNameandhtmlFor - Attributes that match event handler names such as
onClickandonMouseOverare filtered out, regardless of case - Attributes that start with numbers are filtered out
- Attributes that are incomplete, such as
data-andaria-are filtered out - Attributes named with an empty string are filtered out
- Attributes containing invalid characters, such as
my-😀-attr, are filtered out - Any other invalid HTML5 attributes are filtered out
DevLink prints a warning to your CLI console, and adds JSDoc Invalid Attribute comments, when it filters out attributes due to these rules, except when removing attributes with an empty string as their name.
For example, this exported code shows a warning about a custom attribute that was filtered out:
For more information, see What DevLink Exports.
Renaming exported components and props
DevLink now renames exported components and props to ensure that the generated React code has valid, collision-free identifiers. Here is a summary of the changes that it makes:
Components
DevLink sanitizes exported component names to handle:
- Emojis and special characters:
My 😀 Component→MyComponent - Numbers at the start:
123→UnknownComponent123,1Component→UnknownComponent1Component - Reserved words:
class→UnknownComponentClass - Empty or whitespace-only names:
""or" "→UnknownComponent - Collisions: Multiple components named
MyComponent→MyComponent,MyComponent2,MyComponent3
Props
DevLink sanitizes exported prop names to handle:
- Emojis and special characters:
😀→unknownProp - Numbers at the start:
123→unknownProp123,1prop→unknownProp1Prop - Reserved words:
return→returnProp,private→privateProp - React reserved props:
key→keyProp,ref→refProp - HTML attributes for component props:
class→classProp,for→forProp - Empty or whitespace-only names:
""or" "→unknownProp
Note: HTML attributes like data-* and aria-* are preserved as-is and not sanitized.
What’s Fixed
This update fixes several critical issues in the previous system:
- No more leading underscores: Previously, names starting with numbers like
123would become_123or__123, which violates JavaScript naming conventions - Better handling of reserved words: Component props named
classorfornow becomeclassPropandforPropinstead of_classand_for - React conflicts resolved: Props named
keyorrefnow becomekeyPropandrefPropto avoid conflicts with React’s special props - Fallback for invalid names: Empty or whitespace-only names now get meaningful fallback names instead of breaking
For more information, see What DevLink Exports.