Search code examples
javascriptreactjsgetaxiosreact-select

How to get a data after react select using axios and ReactJS?


I am newbie on ReactJS, I want to get a Price value just after the select of the Product name by react select and display it.

My method :

    constructor(props) {
        super(props);
        this.state = {
     PrixV: ""

     }
        PrixDisplay(selectprdt) {
            return axios.get("/app/getPrixprod/" + selectprdt).then(response => {
             if (response && response.data) {
                this.setState({
                  PrixV: response.data
                });
              }
console.log(response.data)
            }).catch(error => {
              console.error(error);
            });
          }

I try to read this value by :

<p>{this.state.PrixV} </p>

When I run it, nothing is displayd on the Price column and after I select the product name, I get :

Objects are not valid as a React child (found: object with keys {PrixV}). If you meant to render a collection of children, use an array instead.
    in p (at AjouterFacture.js:383)

And the console returns :

[{…}]0: {PrixV: "250.000"}length: 1__proto__: Array(0)

How can I read and display it ?


Solution

  • You must use the map, try to change the code like this :

        constructor(props) {
            super(props);
            this.state = {
         Prix: []};
        render() {
        let {
              Prix
            } = this.state.Prix;
        return (
         <td>
     {  this.state.Prix.map((pr, k) => 
          <p key={k} >{pr.PrixV} </p>
                           )} 
                             </td>
        );}
        PrixDisplay(selectprdt) {
            return axios.get("/app/getPrixprod/" + selectprdt).then(response => {
             if (response && response.data) {
                this.setState({
                  Prix: response.data
                });
              }
    
            }).catch(error => {
              console.error(error);
    
            });
          }
    

    I hope that's will be helpful.