2016-06-13 3 views
0

の状態を保持せず、次に期待どおりにチェックされます。しかし、別のパネルに切り替えてスイッチバックすると、チェックボックスをオンにしてチェックを外す必要があります。どのように私はこれを修正するのですか?タグパネルのチェックボックスをクリックすると、チェックボックスは反応

ここは私のコードです。私はreact-tab-panelをnpmから使用しています。

Container:

export default class Container extends Component { 
    static propTypes = { 
    }; 
    constructor(props) { 
     super(props); 
     this.state = { 
      chosenItem: { 
       a: [], 
       b: [], 
       c: [], 
       d: [] 
      } 
     }; 
    } 

    handleCheckBoxChange = (e) => { 
     const value = e.target.value; 
     const item = e.target.attributes.getNamedItem('data-tag').value; 
     const chosenItem = this.state.chosenItem; 
     const index = chosenItem[item].indexOf(value); 
     if (index > -1) { 
      chosenItem[item].splice(index, 1); 

     } 
     chosenItem[item].push(value); 

    } 

    render() { 
     return (
      <div> 
       <Panel 
        handleCheckBoxChange={this.handleCheckBoxChange} 

       /> 
      </div> 
     ); 
    } 
} 

Panel:

import TabPanel from 'react-tab-panel'; 
import 'react-tab-panel/index.css'; 
import CheckBox from './CheckBox.jsx'; 

export default function Panel({ 

    handleCheckBoxChange 
}) { 
    const tabList = { 
     a: ['1', '2'], 
     b: ['1', '2'], 
     c: ['1', '2'], 
     d: ['1', '2'] 
    }; 

    return (
     <TabPanel 
      tabPosition="left" 
     > 
     { 
      Object.keys(tabList).map((key) => { 
       return (
        <form 
         key={key} 
         tabTitle={key} 
        > 
        { 
         tabList[key].map((item) => 
          <CheckBox 
           key={item} 
           value={item} 
           handleCheckBoxChange={handleCheckBoxChange} 
           tag={key} 
          /> 
         ) 
        } 
        </form> 
       ); 
      }) 
      } 
     } 
     </TabPanel> 
    ); 
} 

Checkbox:

export default function CheckBox({ 
    tag, 
    value, 

    handleCheckBoxChange 
}) { 
    return (
     <div> 
      <label> 
       <input 
        type="checkbox" 
        value={value} 

        onChange={handleCheckBoxChange} 
        data-tag={tag} 
       /> 
       {value} 
      </label> 
     </div> 
    ); 
} 
+0

コンポーネントの状態を変更するには、['setState'](https://facebook.github.io/react/docs/component-api.html#setstate)を使用してください。 – robertklep

+0

私の場合、@robertklepのsetStateは良い解決策ではありません。私も反応ルータを使用しているので、私はパスをこのパスに戻すと、すべての状態がなくなります。 – Downpooooour

答えて

1

あなたは、アプリケーションの状態のツリーを格納するためFluxまたはReduxを使用して検討すべきです。

+0

私はちょうどreduxを使用しています。私はすでにそれを還元した。とりあえずありがとう。 – Downpooooour

関連する問題