2017-08-12 2 views
-1

Ich möchte eine endlose/Schleife reaktions-native Picker wie auf dem Bild unten erstellen.React-native - So erstellen Sie eine unendliche Picker

enter image description here

Also, meine Frage ist: Wenn ich Scrollen, wie kann ich die Picker wieder machen beginnen ab dem ersten Punkt nach dem letzten Punkt erreichen?

Hier ist mein Code:

render() { 
    const hourItems = []; 
    for(var i = 0; i < 24; i++) { 
    hourItems.push(
     <Picker.Item label={i.toString()} value={i} key={i} /> 
    ); 
    } 

    return(
    <ScrollView style={styles.panel}> 
     <Picker 
     selectedValue={this.state.hour} 
     onValueChange={(itemValue, itemIndex) => this.setState({ hour: itemValue })} 
     > 
     {hourItems} 
     </Picker> 
    </ScrollView> 
); 
} 
+0

Ich denke, Sie sollten Ihre Frage präzisieren. Mit was genau hast du ein Problem? Sie wissen nicht, wie Sie eine Endlosschleife erstellen oder Ihre App so gestalten, dass sie zu Ihrem Bildschirm passt? – mkatanski

+0

Wenn ich scrolle, wie kann ich den Picker wieder vom ersten Punkt aus starten, nachdem ich den letzten Punkt erreicht habe? – Nelio

+0

ok, siehe meine Antwort unten – mkatanski

Antwort

0

Redux Aktion erstellen, den Wert der Minuten und Stunden erhöhen. Innerhalb dieser Aktion können Sie prüfen, ob es zurückgesetzt werden soll, zum Beispiel:

export const tick =() => (dispatch, getState) => { 
    const { minute } = getState().clock 
    if (minute === 59) { 
    dispatch({ type: RESET_MINUTE}) 
    dispatch({ type: INCREMENT_HOUR}) 
    } else { 
    dispatch({ type: INCREMENT_MINUTE}) 
    } 
} 

und im Minderer:

const createReducer = (initialState, handlers) => 
    (state = initialState, action) => { 
    if (handlers.hasOwnProperty(action.type)) { 
     return handlers[action.type](state, action) 
    } 
    return state 
    } 

export default createReducer(initialState, { 
    INCREMENT_HOUR(state, action) { 
    return { 
     ...state, 
     hour: state.hour + 1, 
    } 
    }, 
    INCREMENT_MINUTE(state, action) { 
    return { 
     ...state, 
     minute: state.minute + 1, 
    } 
    }, 
    RESET_MINUTE(state) { 
    return { 
     ...state, 
     minute: 0, 
    } 
    }, 
}) 

dann Komponente mit dem Druckminderer anschließen und das Update sollte automatisch sein :)

Verwandte Themen