2017-06-27 2 views
1

Ich verwende react-table und haben eine Filtermethode für jede Spalte, die funktioniert. Allerdings kann ich nicht herausfinden, wie ich das Filtereingabefeld tatsächlich style - es ist jetzt weiß und fügt sich in den Hintergrund.Wie style ich das Eingabefeld für das Eingabefeld für den Filter?

Hier ist ein codepen, wo die „Last Name“ Spalte filterbar ist, mit einem Eingabefeld: https://codepen.io/anon/pen/QgOdOp?editors=0010

Ich möchte einige semantische Styling zu diesem Eingabefeld hinzuzufügen, wie folgt aus:

    <div className="ui icon input"> 
         // Input values would go here 
         <i className="search icon" /> 
        </div> 

Aber ich weiß nicht, wie man den Eingabewert an die Spalte selbst bindet.

Ich habe folgend in der bestimmten Spalte versucht, aber es hat nichts machen:

{ 
    Header: 'Last Name', 
    filterable: true, 
    id: 'lastName', 
    accessor: d => d.lastName 
    Filter: Cellinfo => (
       <div className="ui icon input"> 
        <select onChange={event => onFiltersChange(event.target.value)} value={filter ? filter.value : ''}></select> 
        <i className="search icon" /> 
       </div> 
    ) 
    } 
+0

Ist dies 2 Fragen - wie style die Eingabe? und wie bindet man den Eingabewert an die Spalte? –

+0

Hauptsächlich wie man das Styling tatsächlich anwendet. Der andere Teil werde ich aus der Dokumentation herausfinden. – cbll

+0

Versuchen Sie ein Symbol zum Eingabefeld hinzuzufügen? Oder welche Art von Styling willst du? –

Antwort

2

Die mit einfachen CSS erreicht werden könnte. Geben Sie der Tabelle eine id oder class, dann zielen Sie auf die Eingänge und stylen Sie sie nach Bedarf.

<ReactTable 
    showFilters={true} 
    data={makeData()} 
    columns={columns} 
    className='react-table' 
/> 

.react-table input { 
    background-color: black; 
    color: white; 
} 

Die bessere Option wäre react-table s verwenden integrierte in Filter Spalt Option eine benutzerdefinierte UI für die Filter zu definieren. Dies ist in der Custom Filtering example dokumentiert. Dadurch können Sie ein Objekt style übergeben.

const columns = [ 
    { 
    Header: 'Name', 
    columns: [ 
     { 
     Header: 'First Name', 
     accessor: 'firstName', 
     }, 
     { 
     Header: 'Last Name', 
     filterable: true, 
     id: 'lastName', 
     accessor: d => d.lastName, 
     Filter: ({filter, onChange}) => (
      <input 
      onChange={event => onChange(event.target.value)} 
      value={filter ? filter.value : ''} 
      style={{ 
       width: '100%', 
       backgroundColor: 'gray', 
       color: 'white', 
      }} 
      /> 
     ), 
     }, 
    ], 
    }, 
    { 
    Header: 'Info', 
    columns: [ 
     { 
     Header: 'Age', 
     accessor: 'age', 
     }, 
    ], 
    }, 
]; 

Mit diesem können Sie ein Hintergrundbild definieren, um das gewünschte Symbol zu erreichen. Oder Sie könnten eine benutzerdefinierte Komponente übergeben, die ein Symbolelement hinter der Eingabe setzt. So etwas wie das:

Filter: ({filter, onChange}) => { 
    return (
     <div style={{position: 'relative'}}> 
     <input 
      onChange={event => onChange(event.target.value)} 
      value={filter ? filter.value : ''} 
      style={{ 
      width: '100%', 
      backgroundColor: 'transparent', 
      color: '#222222', 
      }} 
     /> 
     <i style={{position: 'absolute', right: '10px', lineHeight: '30px'}}> 
      Icon 
     </i> 
     </div> 
) 
); 
+0

Ich habe versucht, Ihr zweites Beispiel zu implementieren, indem Sie eine Stileigenschaft hinzufügen (so ziemlich kopieren Sie den gesamten Filter in meine aktuelle Spalte). Nichts ändert sich, es hat keinen Einfluss auf das Styling? – cbll

+0

Warte - es funktioniert im Codepen, aber nicht in meinem eigenen Beispiel. Etwas ist zweifelhaft ... Das muss das ganze Problem sein. Danke für Ihre Hilfe. Überprüfen Sie es. Es ist wirklich seltsam, ich kann die Zeilen stylen, aber anscheinend nimmt die Filterspalte es nicht. – cbll

+0

Kopieren Sie niemals nur, ohne den Code zu sehen. Viele Beispiele für Stackoverflow enthalten Pseudocode und Tippfehler, da die Benutzer versuchen, Fragen schnell zu beantworten. Konnten Sie es funktionieren? –

Verwandte Themen