So ändern Sie die input-Wert in redux
Bin ich eine Datei-manager-app auf Basis reagieren-redux, und ich treffe problem mit input
.
Zum Beispiel mein code:
PathForm.js:
export default class PathForm extends Component {
render() {
const { currentPath, handleSubmit } = this.props;
console.log('PathFormPathFormPathForm', this.props)
return (
<div className="path-box">
<form onSubmit={handleSubmit}>
<div>
<input type="text" className="current-path-input" placeholder="input path" value={currentPath} />
</div>
<button className="go-btn" type="submit">Go</button>
</form>
</div>
);
}
}
Explorer.js:
class Explorer extends Component {
goPath(e) {
e.preventDefault()
//fake function here, because I have to solve the input problem first
console.log('PathForm goPath:',this.props)
let {targetPath , actions} = this.props
swal(targetPath)
}
render() {
const { node, currentPath , actions} = this.props
console.log('Explorer.render:',this.props)
return (
<div className='explorer-container'>
<PathForm currentPath={currentPath} handleSubmit={this.goPath.bind(this)}/>
<FileListOperator />
<FileListView fileList={node && node.childNodes} actions ={actions} />
</div>
);
}
}
function mapStateToProps(state, ownProps) {
return {
node: state.tree[state.tree.currentPath],
currentPath: state.tree.currentPath
};
}
function mapDispatchToProps(dispatch) {
console.log('mapDispatchToProps')
return {
actions: bindActionCreators(NodeActions, dispatch)
};
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(Explorer);
Funktion, die ich will:
Ich habe eine PathForm
müssen es zeigen, Weg von der zwei-Wege -:
- Benutzer klicken Sie auf einen Datei-Pfad vom linken Baum-Ansicht
Explorer
bekommen Sie diesen PfadcurrentPath
, dann pass aufPathForm
, und zeigencurrentPath
im Eingang - Benutzer auch direkt geben Sie einen Pfad zu der
PathForm
's input,PathForm
nennenhandleSubmit
(Explorer-Funktion) , ändern Sie diecurrentPath
Zusätzliche:ich will
PathForm
als eine stateless Komponente
Das problem:
- Würde ich gerne verwenden
PathForm
als Staatenlose form, so dass ich nicht wollen, verbinden Sie es zu speichern, aber ich brauche es die Eingabe ändern, indemcurrentPath
. Aber wenn ichvalue={currentPath}
, kann der Benutzer nicht geben Sie nichts anderes. - änderung
<input type="text" onChange={this.changeValue} value={this.getValue()}/>
Benutzer erlauben, den Typ string, in diesem Eingang, aber nicht verwenden können, RequisitencurrentPath
übergebenExplorer
- Die einzige Möglichkeit die ich mir vorstellen kann ist, schließen Sie dieses Formular, um zu speichern, welche ich nicht will. Ich möchte
Explorer
bis zum Versand alle Aktionen und pass Requisiten.
Versucht mit einem Paket
Fand ich den Eingang nicht als mein Gedanke, also habe ich versucht die beiden beliebten Paket:
redux-form
Es ein Formular erstellen, muss so viel code, und die offizielle doc nicht sagen, wie die zum Rendern dieser form mit den Eltern Requisiten,
Ich versuche zu passprops
undhandleSubmit
zu Ihr, nicht zu arbeiten. Nachdem ich sehen
Reagieren + Redux - Was ist der beste Weg zu handhaben CRUD-in einer form-Komponente?
und Wie zu verdrahten redux-form Bindungen an die Formular-Eingaben
Ich fand, ich kann das nicht tun, Sie definieren eine Funktion überschreiben Sie mir, dieses Verhalten ist nicht gut für mich(ich habe zum ändern der handlerSubmit name der Funktion, aber es immer noch nicht funktionieren), und es eine Verbindung zu den speichern. So Wende ich michformsy-react
formsy-react
Müssen noch so viel code, obwohl es einige
mixin
, aber ich habe noch so schreiben Sie einen benutzerdefinierten text-Eingabe mitchangeValue
Funktion selbst(changeValue
ist keine Notwendigkeit in den meisten situation, wenn das schreiben normalhtml jquery app
).Dann fand ich das problem, dassPathForm
nicht verwenden können, RequisitencurrentPath
übergebenExplorer
...
Arbeitete wahrscheinlich die Lösung(aber ich glaube nicht, neigen dazu, Sie zu nutzen):
verbinden PathForm
zu speichern, fügen Sie einem anderen Staat inputPathValue
für diesen Eingang. Verwenden inputPathValue
interagieren mit currentPath
Nach oben, fand ich verwenden-input - /form ist super-bequem in der reagieren....
Bedeutet das, ich muss zu verbinden PathForm
zu stroe?
Eine andere Möglichkeit, um mein problem zu lösen?
InformationsquelleAutor Mithril | 2016-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es
uncontrolled
(nicht Wert) undcontrolled
(Sollwert) Eingang in reactjs.controlled
nicht, die Benutzereingaben ermöglichen, aberuncontrolled
tut.Lösung:
uncontrolled input
(kein value-Attribut).currentPath
ändern.Schlecht Weg:
code:
Guten Weg:
verwenden
componentWillReceiveProps
zu setzen, die Requisiten und dierel
wählen Sie element1.verwenden Sie Formular-submit
2.verwenden Sie die Taste klicken Sie auf
InformationsquelleAutor Mithril
Wenn Sie wirklich nicht wollen, dass der Staat in Redux, können Sie statt speichern den Zustand der Komponente
setState
. Direkten Zugriff auf die input wird dringend abgeraten. Sollten Sie verfolgen den Status der Eingangs-auf die Komponente. Hinzufügen einesonChange
handler die Eingabe, speichern des Status und GriffcomponentWillReceiveProps
wo Sie entscheiden, was zu tun mit den neu ankommenden Requisiten.InformationsquelleAutor DDS