React defaultValue不工作axios传递动态数据

时间:2017-08-17 17:11:13

标签: javascript node.js reactjs axios

你好我是React中的新手,我试着和React玩一点但是有一点我不明白。

首先,用axios数据获取谁返回我的数据,以下,然后我尝试将它们放入输入字段,值(并且是只读),defaultValue更好,现在我有问题,我什么也看不见,当我用firebug查看时,值存在,奇怪的是,当我添加一个不需要的字符时,输入被我想要的填充但不是默认的。

非常奇怪的是,当我把所有东西都放在一个数组中并在它上面做一个地图函数时我有值

json代码

 {"firma":"hallo","strasse":"musterweg 7","plz":"01662"}

js代码

import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';

class Testx extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      data:[]
    };
  }

  componentDidMount(){
    var self = this;

    axios.get('http://localhost/index.php')
      .then(function (response) {
        self.setState({ data: response.data});
      })
      .catch(function (error) {
        console.log(error);
      });
  }

  render() {
    return (
      <div>
        <input type="text" defaultValue={this.state.data.firma}/>
      </div>
    );
  }
}

ReactDOM.render(<Testx/>, document.getElementById('hello'));

4 个答案:

答案 0 :(得分:0)

您需要等到数据出现时才能显示加载内容。

import React from 'react';
import ReactDOM from 'react-dom';
 import axios from 'axios';
class Testx extends React.Component {

    constructor(props) {
  super(props);

  this.state = {
    data:{}
  };
}
componentDidMount(){
    var self = this;
        axios.get('http://localhost/index.php')
  .then(function (response) {
    self.setState({ data: response.data});
  })
  .catch(function (error) {
    console.log(error);
  });

}
  render() {
    const { data }= this.state;
    if(data.firma) {
    return (<div>
              <input type="text" defaultValue={data.firma}/>
       </div>);
    }
    return <div>loading...</div>;
  }
}

ReactDOM.render(<Testx/>, document.getElementById('hello'));

答案 1 :(得分:0)

最初,您的数据状态是数组格式。所以this.state.data.firma不起作用。而是将其设为空对象{}

import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
class Testx extends React.Component {

constructor(props) {
  super(props);

  this.state = {
    data: {}
  };
}

componentDidMount() {
    var self = this;
        axios.get('http://localhost/index.php')
  .then(function (response) {
    self.setState({ data: response.data});
  })
  .catch(function (error) {
    console.log(error);
  });
}

render() {
    return <div>
              <input type="text" defaultValue={this.state.data.firma}/>
       </div>
  }
}

ReactDOM.render(<Testx/>, document.getElementById('hello'));

答案 2 :(得分:0)

&#34;代码风格&#34;已经过时了。尝试使用绑定函数的箭头函数,例如setState。或者在this.myFunction = myFunction.bind(this)之类的构造函数中绑定您的函数一次,以便能够访问this。我已经评论说this.state.data被声明为一个数组。将其更改为对象或通过特定索引访问对象。

class Testx extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      data:{}
    };
  }

  componentDidMount = () => { //Note the arrow function to bind this function
    //Functions like componentDidMount are usually already bound

    axios.get('http://localhost/index.php')
      .then((response) => {
        this.setState({ data: response.data});
      })
      .catch((error) => {
        console.log(error);
      });
  }

  render() {
    return (
      <div>
        <input type="text" defaultValue={this.state.data.firma}/>
      </div>
    );
  }
}

如果您的回复是数组而不是对象,请尝试访问firma,如下所示:this.state.data[index].firma

答案 3 :(得分:0)

非常感谢,特别提示和技巧以及我如何做得更好,我的问题得到了解决,非常感谢所有人在15分钟内帮助我快乐

我现在也找到了一种玩https://facebook.github.io/react/docs/forms.html的方式,并用

设置我的状态
 handleChange(event) {

        var tmp = this.state.data;
        tmp[event.target.id] = event.target.value
        this.setState({data: tmp});
  }

修改我的渲染

   <input type="text" id="firma" value={this.state.data.firma} onChange={this.handleChange} />