首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react Js -×TypeError:无法读取未定义的属性(读取“”params“”

react Js -×TypeError:无法读取未定义的属性(读取“”params“”
EN

Stack Overflow用户
提问于 2021-10-16 17:28:42
回答 1查看 814关注 0票数 0

在这里我试着在我的web应用上编辑一篇文章。但当I显示×TypeError:无法读取未定义的属性时(读取'params‘会有人指出错误。我正在做这件事,这是一个教程。它工作得很好。但在我的代码中,它不起作用。我试着导入useParams并使用它。但是它说useParams不能在类组件中使用。有人能指出错误或给我一个修复吗?

代码语言:javascript
复制
import React, {Component} from 'react';
import axios from 'axios';
import {Dropdown} from "react-bootstrap";
import {useParams} from "react-router-dom";


class Feed2 extends Component {
    constructor(props){
        super(props);
        this.state={
            vehicle:"",
            plateNo:"",
            owner:"",
            manufacturer:"",
            manufacturedYear:"",
            color:""
        }
        
    }


    takInput = (e) => {
        const {name,value}= e.target;
        this.setState({
            ...this.state,
            [name]:value
        })
    }

    register = (e) =>{
        e.preventDefault();
        const id = this.props.match.params.id;
        const {plateNo,owner,manufacturer,manufacturedYear,color,vehicle} = this.state;
        const data ={
            plateNo:plateNo,
            owner:owner,
            manufacturer:manufacturer,
            manufacturedYear:manufacturedYear,
            color:color,
            vehicle:vehicle
        }

        console.log(data);
        axios.put(`http://localhost:8080/registrations/update/${id}`,data).then((res)=>{
            if(res.data.success){
                alert("Post Updated");
                this.setState({
                    vehicle:"",
                    plateNo:"",
                    owner:"",
                    manufacturer:"",
                    manufacturedYear:"",
                    color:""
                })
            }
        })
    }
    componentDidMount(){
        const id = this.props.match.params.id;
        axios.get(`/registrations/${id}`).then((res) =>{
            if(res.data.success){
                this.setState({
                   plateNo:res.data.registrations.plateNo,
                    owner:res.data.registrations.owner,
                    manufacturer:res.data.registrations.manufacturer,
                    manufacturedYear:res.data.registrations.manufacturedYear,
                    color:res.data.registration.color,
                    vehicle:res.data.registrations.vehicle
                })
                console.log(this.state.registrations)
            }
        })
    }


    render() {
        return (
            <div className="container">
                <div className="register-box">
                    <div className="Top">

                        <div className="box">
                            <input placeholder="Enter the licence plate number "
                                   className="input2" name="plateNo" value={this.state.plateNo} onChange={this.takInput} />
                        </div>

                    </div>
                    <div className="box">
                        <input placeholder="Enter the owners name "
                               className="input2" name="owner" value={this.state.owner} onChange={this.takInput} />
                    </div>
                    <div className="box">
                        <input placeholder=" Manufactured Year "
                               className="input2" name="manufacturedYear" value={this.state.manufacturedYear} onChange={this.takInput} />
                    </div>
                    <div className="box">
                        <input placeholder="Manufacturer"
                               className="input2" name="manufacturer" value={this.state.manufacturer} onChange={this.takInput} />
                    </div>
                    <div className="box">
                        <input placeholder="Color of the vehicle "
                               className="input2" name="color" value={this.state.color} onChange={this.takInput} />
                    </div>
                    <div className="box">
                        <input placeholder="Vehicle name "
                               className="input2" name="vehicle" value={this.state.vehicle} onChange={this.takInput} />
                    </div>

                    <Dropdown className="drop">
                        <Dropdown.Toggle variant="success" id="dropdown-basic">
                            Select Vehicle Type
                        </Dropdown.Toggle>

                        <Dropdown.Menu>
                            <Dropdown.Item href="#/action-1">Car</Dropdown.Item>
                            <Dropdown.Item href="#/action-2">Van</Dropdown.Item>
                            <Dropdown.Item href="#/action-3">Bus</Dropdown.Item>
                            <Dropdown.Item href="#/action-3">Lorry</Dropdown.Item>
                            <Dropdown.Item href="#/action-3">Three-weeler</Dropdown.Item>
                            <Dropdown.Item href="#/action-3">Bike</Dropdown.Item>
                            <Dropdown.Item href="#/action-3">Other</Dropdown.Item>

                        </Dropdown.Menu>
                    </Dropdown>



                    <div className="regbuttonContainer">
                        <button className="Button" onClick={this.register}>Register Vehicle</button>
                    </div>
                </div>

            </div>
        );
    }
}


export default Feed2;
EN

回答 1

Stack Overflow用户

发布于 2021-10-16 17:37:23

我猜你需要用withRouter HOC来包装这个组件,所以它就像导出默认withRouter(Feed2);

并从‘react- withRouter -dom’导入路由器;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69597999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档