在react js中传递和显示对象数组

时间:2017-07-17 09:56:33

标签: javascript reactjs reactive-programming

我有两个输入框,它们将从用户那里获取输入,点击一个按钮会将输入保存在一个数组中并显示在屏幕上。

我为此写的反应代码是这样的:

class Todo extends React.Component{
  constructor(props){
    super(props);
    this.state={
      input:[],
      desc:'',
      expense:'',
      list:[]
    }
    this.save=this.save.bind(this);
    this.changeDesc=this.changeDesc.bind(this);
    this.changeExpense=this.changeExpense.bind(this);
  }
  changeDesc(e){
    this.setState({
      desc:e.target.value
    })
  }

  changeExpense(e){
   this.setState({
      expense:e.target.value
     })
  }
  save(saveText){
    var list=this.state.list;
    list.push({
      text:saveText,    
    })
    this.setState({
      list:list,
      desc:'',
      expense:''
    })
    //console.log(input);
  }
  render(){
         return(
           <div>
           <Save saveText={this.save} text={this.state.input}/>
           <Display list={this.state.list}/>
             </div>
          )
  }
}
class Save extends React.Component{
  constructor(props){
    super(props);
    this.state={
      input:this.props.text
    }
    this.save=this.save.bind(this);
  }
  save(){
    var input=this.state.input;
    var desc=document.getElementById("desc").value;
    var expense=document.getElementById("expense").value;
    input.push(desc,expense);
    this.props.saveText(input);
    console.log(this.props.saveText);
    this.setState({
      input:[]
    })
  }
  render(){
    return(
      <div>
        <input type='text' id="desc" onChange={this.changeDesc}/>
        <input type="text" id="expense" onChange={this.changeExpense}/>
        <input type="button" value="save" onClick={this.save}/>
      </div>
    )
  }
}

class Display extends React.Component{
  constructor(props){
    super(props);
    this.state={
      todos:[]
    }
  }
  componentWillReceiveProps(nextProps){
    this.setState({
      todos:nextProps.list
    })
  }
  render(){
    var renderList=this.state.todos;
    var listElements=[];
    for(var i=0;i<renderList.length;i++){
    listElements.push(renderList[i]);
    console.log(listElements);
    }
    return(
      <div>{listElements}</div>
    )
  }
}

ReactDOM.render(<Todo/>,document.getElementById('root'));

但是这段代码没有在屏幕上显示任何内容,而且我收到了一些给定输入的错误。Error

相同的Codepen链接是:Link

反应代码有什么问题?

1 个答案:

答案 0 :(得分:1)

您的列表包含一个对象文本数组,其中iteself是一个字符串数组

您也可以简单地映射它而不是使用for循环

render(){


    return(
      <div>{this.state.todos.map((item) => (<div>{item.text[0] + ' ' + item.text[1]}</div>))}</div>
    )
  }

<强> CODEPEN