Skip to content

Commit e2868f1

Browse files
committed
add support for refs as array ref={[props.ref, myRef]}
1 parent 59823cd commit e2868f1

File tree

9 files changed

+42
-6
lines changed

9 files changed

+42
-6
lines changed

packages/babel-plugin-jsx-dom-expressions/src/dom/element.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,11 @@ function transformAttributes(path, results) {
612612
)
613613
)
614614
);
615-
} else if (isConstant || t.isFunction(value.expression)) {
615+
} else if (
616+
isConstant ||
617+
t.isFunction(value.expression) ||
618+
t.isArrayExpression(value.expression)
619+
) {
616620
results.exprs.unshift(
617621
t.expressionStatement(
618622
t.callExpression(

packages/babel-plugin-jsx-dom-expressions/src/shared/component.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,11 @@ export default function transformComponent(path) {
108108
])
109109
)
110110
);
111-
} else if (isConstant || t.isFunction(value.expression)) {
111+
} else if (
112+
isConstant ||
113+
t.isFunction(value.expression) ||
114+
t.isArrayExpression(value.expression)
115+
) {
112116
runningObject.push(t.objectProperty(t.identifier("ref"), value.expression));
113117
} else if (t.isCallExpression(value.expression)) {
114118
const refIdentifier = path.scope.generateUidIdentifier("_ref$");

packages/babel-plugin-jsx-dom-expressions/src/universal/element.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ function transformAttributes(path, results) {
123123
)
124124
)
125125
);
126-
} else if (isConstant || t.isFunction(value.expression)) {
126+
} else if (
127+
isConstant ||
128+
t.isFunction(value.expression) ||
129+
t.isArrayExpression(value.expression)
130+
) {
127131
results.exprs.unshift(
128132
t.expressionStatement(
129133
t.callExpression(

packages/babel-plugin-jsx-dom-expressions/test/__dom_compatible_fixtures__/attributeExpressions/code.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,9 @@ const template88 = (
325325
{count()}
326326
</button>
327327
);
328+
329+
const template89 = (
330+
<button type="button" ref={[props.ref, myref]}>
331+
{count()}
332+
</button>
333+
);

packages/babel-plugin-jsx-dom-expressions/test/__dom_compatible_fixtures__/attributeExpressions/output.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,4 +820,10 @@ const template88 = (() => {
820820
});
821821
return _el$107;
822822
})();
823+
const template89 = (() => {
824+
var _el$108 = _tmpl$46();
825+
_$use([props.ref, myref], _el$108);
826+
_$insert(_el$108, count);
827+
return _el$108;
828+
})();
823829
_$delegateEvents(["click", "input"]);

packages/babel-plugin-jsx-dom-expressions/test/__universal_fixtures__/attributeExpressions/code.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,5 @@ const template26 = <div ref={binding.prop} />
124124
const template27 = <div ref={refFn} />
125125
const template28 = <div ref={refConst} />
126126

127-
const template29 = <div ref={refUnknown} />
127+
const template29 = <div ref={refUnknown} />
128+
const template30 = <div ref={[refFn, refUnknown]} />

packages/babel-plugin-jsx-dom-expressions/test/__universal_fixtures__/attributeExpressions/output.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,8 @@ const template29 = (() => {
308308
typeof _ref$10 === "function" ? _$use(_ref$10, _el$38) : (refUnknown = _el$38);
309309
return _el$38;
310310
})();
311+
const template30 = (() => {
312+
var _el$39 = _$createElement("div");
313+
_$use([refFn, refUnknown], _el$39);
314+
return _el$39;
315+
})();

packages/dom-expressions/src/client.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,9 @@ export function dynamicProperty(props, key) {
222222
}
223223

224224
export function use(fn, element, arg) {
225-
untrack(() => fn(element, arg));
225+
untrack(() =>
226+
Array.isArray(fn) ? fn.flat(Infinity).forEach(fn => fn && fn(element, arg)) : fn(element, arg)
227+
);
226228
}
227229

228230
export function insert(parent, accessor, marker, initial) {

packages/dom-expressions/src/universal.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,11 @@ export function createRenderer({
243243
memo,
244244
createComponent,
245245
use(fn, element, arg) {
246-
return untrack(() => fn(element, arg));
246+
return untrack(() =>
247+
Array.isArray(fn)
248+
? fn.flat(Infinity).forEach(fn => fn && fn(element, arg))
249+
: fn(element, arg)
250+
);
247251
}
248252
};
249253
}

0 commit comments

Comments
 (0)