2017-04-12 9 views
1

renderList()には、クリックしたコンテンツを削除する削除ボタンがあります。私はsetStateをどこに置くかわからないので、onClick()の中に入れます。これは機能しません。私はこれを正しくやっているのか、これを解決する良い方法があるのか​​を知りたい。ボタンをクリックしてページを表示します

onClickの機能

onClick={() => { 
    this.props.deleteBook(list.book_id); 
    this.setState({delete: list.book_id}); 
}}> 

mapStateToPropsの使用に基づいてReact.js

import React, { Component } from 'react'; 
import { connect } from 'react-redux'; 
import { selectUser } from '../actions/index.js'; 
import { deleteBook } from '../actions/index.js'; 
import _ from 'lodash'; 

class myPage extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      delete: 0 
     } 
    } 

    componentWillMount() {  
     this.props.selectUser(this.props.params.id); 
    } 


    renderList() { 
      return this.props.list.map((list) => { 
      return (
       <li className='book-list' 
        key={list.book_id}> 
         {list.title} 
         <button 
         value={this.state.delete} 
         onChange={this.onClickChange} 
         onClick={() => { 
          this.props.deleteBook(list.book_id); 
          this.setState({delete: list.book_id}); 
         }}> 
         Delete 
         </button> 

       </li> 
      ); 
     }) 
    } 

    render() { 
     const {user} = this.props; 
     const {list} = this.props; 
     if(user) { 

      return(
       <div> 
        <h2>Date Joined: {user.user.joined}</h2> 
        <h1>My Page</h1> 
        <h2>Username: {user.user.username}</h2> 
        <div>My Books: 
          <h1> 
           {this.renderList()} 
          </h1> 
        </div> 
       </div> 
      ) 
     } 
    } 
} 
function mapStateToProps(state) { 
    return { 
     user: state.user.post, 
     list: state.list.all 
    } 
} 
export default connect(mapStateToProps, { selectUser, deleteBook })(myPage); 
+0

コンポーネントの状態を 'this.state = {delete:0}'に初期化しました。これは削除されるMyPageコンポーネントまたはブックが削除されることを表しますか? (また、あなたのクラス 'myPage'は' MyPage'でなければなりません) – styfle

+0

@styfleこれはダミーのデータであり、実際に何もしません。私はthis.state = {delete:0}を置くだけで、削除ボタンをクリックするとコンポーネントが再レンダリングされます。これは動作しますが、私は別のリンクに行き、本のリストがなくなるまで戻ってくる必要があります。私は削除をクリックしてコンポーネントをレンダリングし、選択したブックリストが消えるメソッドを探したかった。 – Yh1234

+0

私はsetStateがコンポーネントを再レンダリングすると考えましたが、レンダリングされていないようです。 – Yh1234

答えて

3

あなたはReduxのを使用しているように、思えます。書籍のリストは、コンポーネントの外部にあるpropsというReduxストアから取得します。

コンポーネントにthis.state.deleteは必要ありません。州がReduxによって管理されているので、バグはReduxコードにあり、Reactコードにはないようです。レジューサーを見て、アイテムの削除アクションを正しく処理していることを確認してください。

関連する問題