如何在ReactJS的render中展示Laravel验证响应?
在ReactJS的render函数中展示Laravel验证错误列表
没问题,我来帮你实现类似Laravel的错误展示效果!你已经通过Axios成功捕获了Laravel返回的422验证错误并存在state里了,接下来只需要把错误数据转换成可遍历的格式,再在render里渲染出来就行。
第一步:转换错误数据格式
Laravel返回的errors是一个对象,每个键对应字段名,值是该字段的错误信息数组。我们需要把它转换成一维数组,这样就能像Laravel的$errors->all()那样遍历所有错误:
// 在render函数里处理错误数据 const errorList = this.state.errors ? Object.values(this.state.errors).flat() : [];
Object.values(this.state.errors):提取所有字段的错误数组,得到一个二维数组flat():把二维数组转成一维数组,合并所有错误信息到一个数组里
第二步:在render中渲染错误列表
接下来就可以像Laravel那样,判断如果有错误就渲染<ul>和<li>:
render() { // 处理错误数据 const errorList = this.state.errors ? Object.values(this.state.errors).flat() : []; return ( <div> {/* 你的表单内容 */} <form onSubmit={this.handleSubmit}> {/* 表单输入项... */} <button type="submit">提交</button> </form> {/* 错误列表展示 */} {errorList.length > 0 && ( <ul style={{ color: 'red' }}> {errorList.map((errorMsg, index) => ( <li key={index}>{errorMsg}</li> ))} </ul> )} </div> ); }
- 用
errorList.length > 0判断是否有错误,避免空列表渲染 map遍历错误数组渲染每个<li>,记得给每个<li>加唯一的key属性(这里用index临时替代,如果你有更唯一的标识会更好)
补充:初始化state的错误字段
为了避免初始状态下的报错,建议在组件的constructor里初始化errors为null或空对象:
constructor(props) { super(props); this.state = { // 你的其他state字段,比如action、phone_number等 errors: null }; // 别忘了绑定handleSubmit this.handleSubmit = this.handleSubmit.bind(this); }
这样就能完全实现和Laravel代码一样的错误展示效果啦!
内容的提问来源于stack exchange,提问作者Tausif Raut
相关产品推荐
相关产品推荐

