diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1602073a95..c50ccc0dba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,9 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange
### Fixed
* [`no-unused-state`]: avoid a crash on type-only gDSFP declarations ([#3225][] @ljharb)
+* [`jsx-curly-brace-presence`]: the string "never" defaults to `propElementValues` as `ignore` ([#3228][] @ljharb)
+[#3228]: https://github.com/yannickcr/eslint-plugin-react/issues/3228
[#3225]: https://github.com/yannickcr/eslint-plugin-react/issues/3225
## [7.29.2] - 2022.02.25
diff --git a/lib/rules/jsx-curly-brace-presence.js b/lib/rules/jsx-curly-brace-presence.js
index b5a0e99537..485aa0c8ca 100755
--- a/lib/rules/jsx-curly-brace-presence.js
+++ b/lib/rules/jsx-curly-brace-presence.js
@@ -72,7 +72,7 @@ module.exports = {
const HTML_ENTITY_REGEX = () => /&[A-Za-z\d#]+;/g;
const ruleOptions = context.options[0];
const userConfig = typeof ruleOptions === 'string'
- ? { props: ruleOptions, children: ruleOptions, propElementValues: ruleOptions }
+ ? { props: ruleOptions, children: ruleOptions, propElementValues: OPTION_IGNORE }
: Object.assign({}, DEFAULT_CONFIG, ruleOptions);
function containsLineTerminators(rawStringValue) {
diff --git a/tests/lib/rules/jsx-curly-brace-presence.js b/tests/lib/rules/jsx-curly-brace-presence.js
index a0937b047b..8c66929233 100755
--- a/tests/lib/rules/jsx-curly-brace-presence.js
+++ b/tests/lib/rules/jsx-curly-brace-presence.js
@@ -459,6 +459,15 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
code: `
`,
+ },
+ {
+ code: `
+ {activity.type}}
+ />
+ `,
+ features: ['no-ts'],
+ options: ['never'],
}
)),