2017-07-14 137 views
1

What should i do?, i try many ways to solve this problem but still uncaught type error .push and .map is not function.Please help me solve this ,it will great honor for me.未捕獲的類型錯誤:this.state.Students.push不是函數和this.state.Students.map不是函數

var InsertArray = React.createClass({ getInitialState: function() { return { Students: [], Fname: '', Lname: '', Id: '', } },

render: function() { 
    return (
     <div> 
      Firstname: 
      <input type="text" onChange={this.handleFN} value={this.state.value} /> 
      <br /> 
      Lastname : 
      <input type="text" onChange={this.handleLN} value={this.state.value}/> 
      <br /> 
      Student Id: 
      <input type="number" onChange={this.handleId} value={this.state.value} /> 
      <hr /> 
      <button type="Submit" onClick={this.handleClick}>Submit</button> 
      <button type="Submit" onClick={this.handleClickD}>Display</button> 
      <br /> 
     </div> 
     ); 
}, 

handleFN : function (value) { 
    this.setState({ 
     Fname: value 
    }); 
}, 

handleLn: function (value) { 
    this.setState({ 
     Lname:value 
    }); 
}, 

handleId: function (value) { 
    this.setState({ 
     Id: value 
    }) 
}, 

//this is where the data will be push into Student array by using push.

handleClick: function (e) { 
    e.preventDefault(); 
    var student = { 
     Fname: this.state.Fname, 
     Lname: this.state.Lname, 
     Id : this.state.Id 
    } 
    this.setState({ 
     `Students: this.state.Students.push(student)` 
    }); 
}, 

//And this handleClickD will be read all the data inside array and display.

handleClickD: function (e) { 
    e.preventDefault(); 

     <div> 
      <ul>`{this.state.Students.map(function (stud) { 
        return (<li key={stud.Id}>{stud.Fname}{stud.Lname}` 
       </li>) 
       } 
       )} 
      </ul> 
     </div> 
} }); 

ReactDOM.render(, document.getElementById('container'));

+0

你是否曾經初始化狀態? – bmartin

+0

是的,我已經初始化狀態,但仍然在地圖和推送方法中被捕獲錯誤。 –

+0

我還有1個問題地圖()。它不會在用戶點擊顯示按鈕後顯示數據。請幫助我 –

回答

1

的使用推的情況下會是這樣

handleClick: function (e) { 
    e.preventDefault(); 
    var student = { 
     Fname: this.state.Fname, 
     Lname: this.state.Lname, 
     Id : this.state.Id 
    } 

    this.state.Students.push(student) 
    this.setState({ 
     Students: this.state.students 
    }); 
}, 

但還是明確的方式,concat()是更好的方式,因爲它的非冗長,且具有較少的線路。

1

的Array.push將返回數組的新長度,以便之後:

this.setState({Students: this.state.Students.push(student)}) 

學生將是一個數字不是一個數組。

+0

你能解釋更多的是因爲我是新的,我不明白它的工作方式,謝謝。 –

+0

這意味着push函數可以工作,但只會返回數組內的項數,而不會返回實際的結果。 –

2

使用的concat:

this.setState({Students: this.state.Students.concat(student)}) 
+0

我嘗試使用concat,它的工作原理,謝謝但如果我想用推我如何使它工作? –

1

問題是,array.push不會返回最終陣列中,它會返回陣列的長度。

檢查這個片段:

let a = [1,2,3,4,5,6]; 
 

 
let b = a.push(10); 
 

 
console.log('b = ', b); //b = 7 not [1,2,3,4,5,6,10]

爲了解決您發出使用spread operator,並把新的值到數組:

this.setState({ 
    Students: [...this.state.Students, student] 
}); 

選中此有關傳播經營者的詳細信息: What do these three dots in React do?

相關問題