2017-07-07 1 views
2

reactjsを使用して、jキーとkキーを使用してfacebookをナビゲートする方法のようなキーボードの種類を使用してコンポーネントのリストを試してみます。最初にページに着いたときにjキーを使用してリスト内の最初のコンポーネントにフォーカスを移動し、jとkを使用した後でコンポーネント間でフォーカスを移動するにはどうすればよいですか?コンポーネントのリストをナビゲートする

<ul className={s.feed}> 
    {this.props.data.map((item, index) => { 
    <li key={index} className={s.componentContainer}> 
     <Component component={item} /> 
    </li> 
    })} 
</ul> 

ので、どのようなコードがないことは、基本的にはちょうど私がjおよびkキーを使ってそれらの間のフォーカスを移動し、タブを使用することはできませんどのように思って順序付きリストとIMにコンポーネントを生成します。

+0

などの適切なクラスを(たとえば)設定できます。あなたは[フォーカス](https://stackoverflow.com/questions/17500704/javascript-set-focus-to-html-form-element)メソッドをお探しですか? –

+0

私はコードでそれを更新しました。私はフォーカスメソッドを調べていましたが、リスト内の次のアイテムにフォーカスを移動するメソッドなどがあるかどうか疑問に思っていましたか? –

答えて

2

現在、私は同様の問題に取り組んでいます。

は、あなたがそのような状態があるとします。あなたには

items = [ 
    { 
     name: 'a', 
     onFocus: true 
    }, 
    { 
     name: 'b', 
     onFocus: false 
    } 
]; 

は、メソッドをlifecicle追加し、ここにenentリスナーに

componentWillMount() { 
    document.addEventListener("keydown", this.handleKeyDown, false); 
} 
componentWillUnmount() { 
    document.removeEventListener("keydown", this.handleKeyDown); 
} 

を削除handleKeyDownです - あなたのハンドラ内だけの設定のonFocus値:

handleKeyDown(e) { 
    let index = -1; 
    const items = this.state.items; 
    items.map((item, i) =>{ 
     if(item.onFocus)index = i; 
    }); 

    switch(e.keyCode) { 
     case 74: 
      e.preventDefault(); 
      if(index > 0) i--; 
      break; 
     case 75: 
      e.preventDefault(); 
      if(index < this.state.items.length - 1) i++; 
      break; 
    } 
    for(let i = 0; i < items.length; i++) { 
     items[i].onFocus = i === index; 
    } 
    this.setState({items}); 
} 

onFocusがtrueに設定されている要素に応じて

<ul> 
    {this.props.data.map((item, i) => { 
    <li key={i}> 
     <Component component={item} className={item.onFocus ? 'active' : ''} /> 
    </li> 
    })} 
</ul> 
+0

最後の5行のforループとsetStateメソッドは何ですか? –

+0

ここで更新します - どの項目に 'onFocuse'が' true'に設定されていますか? – kurumkan

+0

私は今それを試していますが、onFocusは実際にコンポーネントをフォーカスしません。どこで実際にコンポーネントをフォーカスできますか? –

関連する問題