所以我实际上遇到了一个用例,在这种用例中,将渲染作为组件而不是函数调用是有益的。使用 React 16,您可以获得错误边界功能。这允许您在组件内引发错误时呈现回退错误 UI。事实证明,如果在函数调用变体中抛出异常,则不会触发componentDidCatch
. 它需要在子组件中抛出。
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = {
error: false
};
}
componentDidCatch() {
this.setState({ error: true});
}
render() {
return this.state.error
? "Error :("
: this.props.children;
}
}
const renderContent = () => {
throw new Error();
}
const Content = () => {
throw new Error();
}
// This will throw exception and not trigger error state
const Foo = () => (
<ErrorBoundary>
<div>{renderContent()}</div>
</ErrorBoundary>
);
// This will trigger the error state
const Bar = () => (
<ErrorBoundary>
<div><Content /></div>
</ErrorBoundary>
);
当然,您可以有更高的错误边界,但只是指出一个特定的用例,您可以选择其中一个。
此外,出于命名目的,将其渲染为组件也很不错。它会在 React 开发工具中显示命名,并且您也可以在进行酶测试时使用该名称作为选择器。