2017-03-09 4 views
1

Ich versuche, den DefaultValue einer Eingabe im Fokus zu löschen und Probleme haben, es inline oder in einer externen Funktion zu tun. Gedanken über den besten Weg, dies zu tun? Wenn ich value anstelle von defaultValue verwende, ist es das gleiche Problem.React ES6 const - löschen Eingang defaultValue auf Fokus

const SomeComponent = (inputValue) => { 

<input type="text" 
    defaultValue={inputValue} 
    onFocus = // clear input defaultValue 
    onBlur={() => dosomething()}/> 
} 

export default SomeComponent 
+0

wie Ihr Code geschrieben wird nicht funktionieren. Sie benötigen eine Rückkehr in Funktionen mit geschweiften Klammern. –

+0

ist 'SomeComponent' eine zustandslose Komponente? – QoP

Antwort

2

Wenn Sie verwenden Ref Reagieren möchten, können Sie etwas tun:

const SomeComponent = (inputValue) => (

    <input type="text" 
    defaultValue={inputValue} 
    ref={input => this.inputField = input} 
    onFocus = {() => this.inputField.value = ""} 
    onBlur={() => dosomething()}/> 
) 

export default SomeComponent 
+0

Dies sollte nicht funktionieren, zustandslose Funktionskomponenten haben keine 'ref's, da dies nur normale Funktionen sind (und' this' in Ihrem Beispiel würde nicht auf die verweisen Komponente) – pawel

+0

Ich werde der Erste sein, zuzugeben, ich bin kein Experte in React, also kann es etwas tun, was es nicht sein sollte. Wenn Sie jedoch eine Funktion an den Ref übergeben, wird Ihnen auch in zustandslosen Komponenten wie diesem ein Objekt zur Verfügung gestellt, auf das Sie später verweisen können. Ich würde diesen Ansatz nicht empfehlen, wenn die Funktionen komplexer wären. Aber wenn sich die Funktionalität nur auf die Eingabe konzentriert, scheint es so zu funktionieren, als ob sie funktioniert. –

+0

Fügen Sie Ihren Code in babel.io/repl ein und Sie werden sehen, dass "this" auf "undefined" transpiliert wird. Oder versuche es auszuführen und es wird "TypeError: Kann die Eigenschaft 'inputField' von undefined nicht setzen" – pawel

1

Würde das funktionieren? onFocus={e => e.target.value == inputValue ? e.target.value = '' : return null}

+0

Yup https://jsfiddle.net/yndn4a62/ – pawel

Verwandte Themen