javascript - 如何将错误显示添加到 React 组件
问题描述
我的 React 应用程序中有许多工作组件。当组件(可以是整个窗口/表单)发现问题时,我想添加显示简单错误/警告消息的功能(为了简单起见,顶部只有一个 H1 元素)。
例如,在更改密码的表单中,最好有以下内容:
onSubmit(event) {
...
if (!this.state.password1 === this.state.password2) {
this.showError("The passwords don´t match"}
...
}
我的第一个意图是使用继承,以这种方式定义一个超类:
export default class MostrarError extends React.Component {
constructor(props) {
super(props);
this.state = { error: '' };
}
mostrarError(msg) {
this.setState({ error: msg });
}
render() {
return (
<React.Fragment>
{this.state.error ? <h1> UPS! {this.state.error} </h1> : null}
this.props.children
</React.Fragment>
);
}
}
但是,超级渲染()方法永远不会被调用,因为每个子类都定义了自己的渲染()。我可以使用某种方法模板,但它涉及修改所有子类。
这肯定是一个非常常见的问题,但我发现的大多数解决方案都使用了 Redux,但我无法使用它。
有人可以指出我的其他解决方案吗?
解决方案
我认为您正在寻找的是拥有一个可以与父组件通信并有条件地呈现自身的警报组件。
为什么不在你的父组件中做这样的事情
export default class ParentCompo extends React.Component{
state = {
error: false,
errorMsg: ''
}
onSubmit = () => {
if(this.state.password1 !== this.state.password2) {
this.setState({error: true, errorMsg: 'Passwords dont match'})
}
}
render(){
return (
<div>
<AlertCompo error={this.state.error} errorMsg={this.state.errorMsg} />
Normal stuff here...
</div>
)
}
}
您的警报组件应如下所示
export default class AlertCompo extends React.PureComponent{
shouldComponentUpdate(nextProps){
if(nextProps.error !== this.props.error){
return true;
}
return false;
}
render(){
if(this.props.error){
return (
<h1>Some alert message {this.props.errorMsg}</h1>
)
}else {
return <React.Fragment />
}
}
}
推荐阅读
- javascript - 如何使用 CSS 和 javaScript 将每个字母分散到容器内的随机位置?
- python - 我试图对 instabot 进行编程,但出现此错误:“错误 - 请求返回 429 错误!”
- android - 我们可以在 xml 中使用单个绑定适配器绑定多个视图吗?
- android - 在视频通话应用程序android上向蓝牙设备发送音频
- django - Celery 忽略 Django settings.py 变量
- flutter - 自定义容器形状
- ruby-on-rails - Errno::ENOTTY 通过 SuSe 上的 Net::SSH 连接到远程服务器时设备的 ioctl 不合适(使用 Ruby on Rails 5.2.4)
- python - Pandas 对参差不齐的顺序数据进行过采样
- python - 如何计算空间仰角(俯仰或仰视)来查找天线增益theta和phi?
- python - Heroku 不允许我在 Python 中使用转换器模块