Ich bin der usage with React Redux-Tutorial folgen. Etwas, das ich wirklich nicht verstehe, ist, wie man Benutzereingaben abruft.React/Redux, wie Benutzereingaben
Sie bauen einen FilterLink Behälter, dessen mapDispatchToProps ist
const mapDispatchToProps = (dispatch, ownProps) => {
return {
onClick:() => {
dispatch(setVisibilityFilter(ownProps.filter))
}
}
}
So spritzt er seine ownProps.filter an die angeschlossenen Präsentations-Komponente. Wenn wir gehen und sehen, wie dieser Container konstruiert wird
const Footer =() => (
<p>
Show:{" "}
<FilterLink filter="SHOW_ALL">All</FilterLink>{", "}
<FilterLink filter="SHOW_ACTIVE">Active</FilterLink>{", "}
<FilterLink filter="SHOW_COMPLETED">Completed</FilterLink>
</p>
)
Ok, gibt es die "Filter" -Eigenschaft. Das ist klar.
Jetzt möchte ich einen Textfilter für das gleiche Beispiel erstellen. Also zuerst hier ist meine Präsentations-Komponente
const TodoSearch = ({onSubmit}) => (
<form
onSubmit={e => {
e.preventDefault()
onSubmit()
}}
>
<input placeholder="Text search" />
<input type="submit" value="Go" />
</form>
)
Aber wenn ich komme, um den Behälter zu schreiben, weiß ich nicht, wie Benutzereingaben
const mapDispatchToProps = (dispatch) => {
return {
onSubmit:() => {
dispatch(setTextSearch(????))
}
}
}
Es ist etwas zu bekommen, ich mit jQuery $ (# text tun würde) .val() aber ... ist es der beste Weg?
Später auf dem gleichen Tutorial bauen sie ein kleines Formular, um eine Todo zu der Liste hinzuzufügen. Ok, lass uns gehen und sehen, wie sie dann Input fangen.
let AddTodo = ({ dispatch }) => {
let input
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
dispatch(addTodo(input.value))
input.value = ''
}}>
<input ref={node => {
input = node
}} />
<button type="submit">
Add Todo
</button>
</form>
</div>
)
}
Warten Sie, wo ist die Magie hier? Haben sie mit diesem Ref-Trick Wert in "Eingabe" -Variablen gebracht? Ist das korrekt? Also, wenn es 20 Eingabefelder gibt, muss ich 20 Variablen mit 20 verschiedenen Referenzen verwenden?
Jede Hilfe schätzen, danke
Ich glaube, es ist ein Problem der Reaktion, anstatt Redux. Und es ist gut erklärt in https://reactjs.org/docs/forms.html#controlled-components. –