2017-07-27 16 views
0

代碼段:值i的在props參數IND沒有改變

function Button(props) { 
    var ans = [ 
    ["56","30","11","20"],["1","-2","2","-1"], 
    ["odd","even","none","both"] 
    ]; 
    var button = [], i; 
    for(i = 0; i <= 3; i++) { 
    button.push(<button key={i} onClick={()=>props.ind(i)}> 
        {ans[props.q-1][i]} 
       </button>) 
    } 
    return (<div>{button}</div>) 
} 

我在使用fatarrows是新手和react.I想提出一個quizzing interface.Here四個按鈕中的(I = 0到3)可以選擇一個具體的問題編號(q)在檢查web開發者時,我發現對於4個按鈕中的每一個,我在props.ind方法中傳遞的值是4,即最終增量後的i值。

+0

由於變量的函數範圍的限制,每個JavaScript程序員都至少犯了一次常見錯誤。閱讀此:https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –

+0

感謝@Phil貝拉米它幫助 – Biboswan

回答

0

很難理解你試圖發生什麼。如果您添加更多信息,我可以幫助更多。

以下是一些可幫助您入門的代碼。它通過循環的問題,該陣列,然後通過循環的答案:

const Buttons = (props) => { 
 
    const questions = [ 
 
    ["56","30","11","20"], 
 
    ["1","-2","2","-1"], 
 
    ["odd","even","none","both"] 
 
    ]; 
 

 
    return (
 
    <div> 
 
     {questions.map((question, i) => (
 
     <div key={i}> 
 
      {question.map((answer, n) => (
 
      <button key={n} onClick={() => alert(answer)}> 
 
       {answer} 
 
      </button> 
 
     ))} 
 
     </div> 
 
    ))} 
 
    </div> 
 
); 
 
}; 
 

 
ReactDOM.render(
 
    <Buttons />, 
 
    document.getElementById('app') 
 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 

 

 
<div id="app"></div>

1

最後固定it.So i是一個變種變量。對於存儲在按鈕數組中的四個按鈕中的每一個,i的值都不是在prop.ind(i)方法參數中複製的,而是存儲了引用。因此,在循環結束時i的最後一個值,即4是我們得到的對於每個HTML按鈕,props.ind(4)。

現在,而是當我聲明讓我在for循環refernce不能被存儲,因爲它不會被存取在循環之外,因此我的立即值存儲在props.ind.ie props.ind(0)對於第一個按鈕,props.ind(1)用於第二個按鈕。