mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
Show a soft error when a text string or number is supplied as a child to non text wrappers (#21953)
* Show soft errors when a text string or number is supplied as a child instead of throwing an error * bring __DEV__ check first so that things inside get removed in prod. * fix lint
This commit is contained in:
@@ -22,8 +22,6 @@ import type {
|
||||
import {mountSafeCallback_NOT_REALLY_SAFE} from './NativeMethodsMixinUtils';
|
||||
import {create, diff} from './ReactNativeAttributePayload';
|
||||
|
||||
import invariant from 'shared/invariant';
|
||||
|
||||
import {dispatchEvent} from './ReactFabricEventEmitter';
|
||||
|
||||
import {
|
||||
@@ -264,10 +262,11 @@ export function createTextInstance(
|
||||
hostContext: HostContext,
|
||||
internalInstanceHandle: Object,
|
||||
): TextInstance {
|
||||
invariant(
|
||||
hostContext.isInAParentText,
|
||||
'Text strings must be rendered within a <Text> component.',
|
||||
);
|
||||
if (__DEV__) {
|
||||
if (!hostContext.isInAParentText) {
|
||||
console.error('Text strings must be rendered within a <Text> component.');
|
||||
}
|
||||
}
|
||||
|
||||
const tag = nextReactTag;
|
||||
nextReactTag += 2;
|
||||
|
||||
@@ -147,11 +147,11 @@ export function createTextInstance(
|
||||
hostContext: HostContext,
|
||||
internalInstanceHandle: Object,
|
||||
): TextInstance {
|
||||
invariant(
|
||||
hostContext.isInAParentText,
|
||||
'Text strings must be rendered within a <Text> component.',
|
||||
);
|
||||
|
||||
if (__DEV__) {
|
||||
if (!hostContext.isInAParentText) {
|
||||
console.error('Text strings must be rendered within a <Text> component.');
|
||||
}
|
||||
}
|
||||
const tag = allocateTag();
|
||||
|
||||
UIManager.createView(
|
||||
|
||||
@@ -524,7 +524,7 @@ describe('ReactFabric', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw for text not inside of a <Text> ancestor', () => {
|
||||
it('should console error for text not inside of a <Text> ancestor', () => {
|
||||
const ScrollView = createReactNativeComponentClass('RCTScrollView', () => ({
|
||||
validAttributes: {},
|
||||
uiViewClassName: 'RCTScrollView',
|
||||
@@ -542,7 +542,7 @@ describe('ReactFabric', () => {
|
||||
act(() => {
|
||||
ReactFabric.render(<View>this should warn</View>, 11);
|
||||
});
|
||||
}).toThrow('Text strings must be rendered within a <Text> component.');
|
||||
}).toErrorDev(['Text strings must be rendered within a <Text> component.']);
|
||||
|
||||
expect(() => {
|
||||
act(() => {
|
||||
@@ -553,7 +553,7 @@ describe('ReactFabric', () => {
|
||||
11,
|
||||
);
|
||||
});
|
||||
}).toThrow('Text strings must be rendered within a <Text> component.');
|
||||
}).toErrorDev(['Text strings must be rendered within a <Text> component.']);
|
||||
});
|
||||
|
||||
it('should not throw for text inside of an indirect <Text> ancestor', () => {
|
||||
|
||||
@@ -473,7 +473,7 @@ describe('ReactNative', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw for text not inside of a <Text> ancestor', () => {
|
||||
it('should console error for text not inside of a <Text> ancestor', () => {
|
||||
const ScrollView = createReactNativeComponentClass('RCTScrollView', () => ({
|
||||
validAttributes: {},
|
||||
uiViewClassName: 'RCTScrollView',
|
||||
@@ -487,9 +487,9 @@ describe('ReactNative', () => {
|
||||
uiViewClassName: 'RCTView',
|
||||
}));
|
||||
|
||||
expect(() => ReactNative.render(<View>this should warn</View>, 11)).toThrow(
|
||||
'Text strings must be rendered within a <Text> component.',
|
||||
);
|
||||
expect(() =>
|
||||
ReactNative.render(<View>this should warn</View>, 11),
|
||||
).toErrorDev(['Text strings must be rendered within a <Text> component.']);
|
||||
|
||||
expect(() =>
|
||||
ReactNative.render(
|
||||
@@ -498,7 +498,7 @@ describe('ReactNative', () => {
|
||||
</Text>,
|
||||
11,
|
||||
),
|
||||
).toThrow('Text strings must be rendered within a <Text> component.');
|
||||
).toErrorDev(['Text strings must be rendered within a <Text> component.']);
|
||||
});
|
||||
|
||||
it('should not throw for text inside of an indirect <Text> ancestor', () => {
|
||||
|
||||
Reference in New Issue
Block a user