2017-03-27 94 views
0

我是新的建設用戶界面的反應(方式),也與FP有點爭執。 基本上,我想知道如果使用curried函數來延遲綁定事件與字段是一個很好的做法,並且有任何性能影響。ReactJS咖喱的功能,以延遲事件綁定

對於EG: 我有一組帖子,每個帖子都有一個評論框,用戶可以在該帖子上發表評論。因此,我們需要在帖子和相關評論中爲該帖子在我的活動Hanlder中進行評論只是一個功能。 檢查工作的代碼示例在CodePen: Event Binding

/* 
* A simple React component 
*/ 
class Application extends React.Component { 
    constructor(props){ 
    super(props) 
    console.log(props) 
    this.state = { 
     posts:['post1', 'post2', 'post3'] 
    } 
    } 
    render() { 
    return (  
     <div> 
     <ul> 
     { this.state.posts.map(
      (post, i) => { 
      return (
      <PostSingle post = {post} index = {i} bindPost = {this.props.post(post)}/> 
      ) 
      } 
     ) } 
      </ul> 
     </div> 
    ) 
    } 
} 

const PostSingle = ({post, index,bindPost}) => { 
    let handlePostComment =() => { 
    return bindPost(null) 
    } 
      return (
       <div> 
      <li key={index}> 
       <input onChange = { 
        (e) => { 
        let value = e.target.value 
        handlePostComment =() => { 
         return bindPost(value) 
        } 
        } 
       }></input> 
       <button onClick={() => {handlePostComment()}}>Comment</button> 
       <p key={index}>{post}</p> 
      </li> 
       </div> 
      )  
} 

/* 
* Render the above component into the div#app 
*/ 
const PostComment = post => comment => { 
    alert(`You commented ${comment} for ${post}`) 
} 
ReactDOM.render(<Application post={PostComment}/>, document.getElementById('app')); 

所以基本上PostComment功能在咖喱的方式獲取屬性作爲被創建的對象的時候。 除了在Redux教程中,我找不到這些例子。 在實際應用中,可以使用Redux的mapDispatchToProps()中的道具將事件傳遞給主要組件。

您的想法和意見將不勝感激。

回答

1

我覺得使用post屬性和state是一個更Reacty的方式。 handlePostComment將在每次呈現調用時重新初始化,因此這些代碼更加強制功能(恕我直言,使用閉包不會使代碼正常工作)。
State是React處理命令邏輯的方式,您可以通過正確使用狀態和道具來從React優化中受益。
一般來說,我認爲它打破了React Redux哲學的真理來源。
在這種情況下,您也不能通過提供值來輸入controlled