feat(transformer): add props null to React.createElement (#1074)

This commit is contained in:
Boshen 2023-10-28 15:59:46 +08:00 committed by GitHub
parent 0a0e93b55d
commit d6ba8910ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 13 deletions

View file

@ -30,8 +30,10 @@ enum JSXElementOrFragment<'a, 'b> {
impl<'a, 'b> JSXElementOrFragment<'a, 'b> {
fn attributes(&self) -> Option<&'b Vec<'a, JSXAttributeItem<'a>>> {
match self {
Self::Element(e) => Some(&e.opening_element.attributes),
Self::Fragment(_) => None,
Self::Element(e) if !e.opening_element.attributes.is_empty() => {
Some(&e.opening_element.attributes)
}
_ => None,
}
}
@ -125,12 +127,6 @@ impl<'a> ReactJsx<'a> {
JSXElementOrFragment::Fragment(_) => self.get_fragment(),
}));
if self.options.runtime.is_classic() && e.attributes().is_some_and(|attrs| attrs.is_empty())
{
let null_expr = self.ast.literal_null_expression(NullLiteral::new(SPAN));
arguments.push(Argument::Expression(null_expr));
}
// TODO: compute the correct capacity for both runtimes
let mut properties = self.ast.new_vec_with_capacity(0);
if let Some(attributes) = e.attributes() {
@ -196,6 +192,9 @@ impl<'a> ReactJsx<'a> {
},
}
}
} else if self.options.runtime.is_classic() {
let null_expr = self.ast.literal_null_expression(NullLiteral::new(SPAN));
arguments.push(Argument::Expression(null_expr));
}
if self.options.runtime.is_automatic() && !children.is_empty() {

View file

@ -1,4 +1,4 @@
Passed: 204/1083
Passed: 206/1083
# All Passed:
* babel-plugin-transform-numeric-separator
@ -804,7 +804,7 @@ Passed: 204/1083
* regression/11061/input.mjs
* variable-declaration/non-null-in-optional-chain/input.ts
# babel-plugin-transform-react-jsx (55/172)
# babel-plugin-transform-react-jsx (57/172)
* autoImport/after-polyfills/input.mjs
* autoImport/after-polyfills-2/input.mjs
* autoImport/after-polyfills-compiled-to-cjs/input.mjs
@ -836,7 +836,6 @@ Passed: 204/1083
* react/arrow-functions/input.js
* react/assignment-babel-7/input.js
* react/avoids-spread-babel-7/input.js
* react/does-not-add-source-self/input.mjs
* react/does-not-add-source-self-babel-7/input.mjs
* react/flattens-spread/input.js
* react/handle-spread-with-proto/input.js
@ -849,7 +848,6 @@ Passed: 204/1083
* react/should-add-quotes-es3/input.js
* react/should-allow-elements-as-attributes/input.js
* react/should-allow-jsx-docs-comment-with-pragma/input.js
* react/should-allow-nested-fragments/input.js
* react/should-allow-no-pragmafrag-if-frag-unused/input.js
* react/should-allow-pragmafrag-and-frag/input.js
* react/should-disallow-spread-children/input.js

View file

@ -212,7 +212,7 @@ impl TestCase for ConformanceTestCase {
println!("{input}\n");
println!("Options:");
println!("{:?}\n", self.transform_options());
println!("Output:\n");
println!("Expected:\n");
println!("{output}\n");
println!("Transformed:\n");
println!("{transformed_code}\n");