Reagir nativo: como selecionar o próximo TextInput depois de pressionar o botão "próximo" do teclado?

201

Eu defini dois campos TextInput da seguinte maneira:

<TextInput 
   style = {styles.titleInput}
   returnKeyType = {"next"}
   autoFocus = {true}
   placeholder = "Title" />
<TextInput
   style = {styles.descriptionInput}          
   multiline = {true}
   maxLength = {200}
   placeholder = "Description" />

Mas depois de pressionar o botão "próximo" no teclado, meu aplicativo nativo de reação não está pulando para o segundo campo TextInput. Como posso conseguir isso?

Obrigado!

andreaswienes
fonte
A resposta de Mitch (atualmente a terceira abaixo) funciona para mim na v0.42.
Lawrence
Para pessoas que v16.8.0usam o React ou acima, recomendo a resposta fornecida por @Eli Johnson na parte inferior. O React descontinuou muitos usos dos reffornecidos nas soluções abaixo.
thedeg123 31/03

Respostas:

331

Definir o segundo TextInputfoco, quando o anterior TextInput's onSubmitEditingé disparado.

Tente isto

  1. Adicionando uma referência ao segundo TextInput
    ref={(input) => { this.secondTextInput = input; }}

  2. Vincule a função de foco ao primeiro evento onSubmitEditing do TextInput .
    onSubmitEditing={() => { this.secondTextInput.focus(); }}

  3. Lembre-se de definir blurOnSubmit como false, para evitar oscilações do teclado.
    blurOnSubmit={false}

Quando tudo estiver pronto, deve ficar assim.

<TextInput
    placeholder="FirstTextInput"
    returnKeyType="next"
    onSubmitEditing={() => { this.secondTextInput.focus(); }}
    blurOnSubmit={false}
/>

<TextInput
    ref={(input) => { this.secondTextInput = input; }}
    placeholder="secondTextInput"
/>
boredgames
fonte
53
Vale mencionar que esse onSubmitEditingretorno de chamada é chamado após o blurevento. Portanto, o teclado pode ficar louco se focado no próximo elemento imediatamente. Portanto, pode ser útil definir blurOnSubmit={false}todos os elementos no formulário, mas deixar no trueúltimo elemento, para permitir que o botão Concluído desfoque a última entrada.
e1dar
9
Isso não funciona mais, a partir da v0.36. Não há método "foco" no componente. Como devemos fazer isso agora?
Mitch
4
O @Mitch funciona bem em 0.40.0. Pode ter sido um bug na versão que você estava executando.
22617
3
Usando RN 0.49, adicionar blurOnSubmit={false}para evitar trepidação no teclado fez com que isso parasse de funcionar, alguém que sabe o que está acontecendo?
Nabil london
13
Para quem não conseguiu fazer o focustrabalho, não use um wrapper para o TextInputcomponente. Se você tem um CustomTextInputcomponente say que envolve TextInput, é necessário implementar TextInputmétodos de desfoque e foco para esse componente, para que funcione conforme o esperado.
Cihad Turhan
65

Você pode fazer isso sem usar refs . Essa abordagem é preferida, pois as referências podem levar a códigos frágeis . Os documentos do React recomendam encontrar outras soluções sempre que possível:

Se você não programou vários aplicativos com o React, sua primeira tendência será tentar usar refs para "fazer as coisas acontecerem" no seu aplicativo. Se for esse o caso, reserve um momento e pense mais criticamente sobre onde o estado deve pertencer na hierarquia de componentes. Freqüentemente, fica claro que o local apropriado para "possuir" esse estado está em um nível mais alto na hierarquia. A colocação do estado lá geralmente elimina qualquer desejo de usar referências para "fazer as coisas acontecerem" - em vez disso, o fluxo de dados geralmente alcança seu objetivo.

Em vez disso, usaremos uma variável de estado para focar o segundo campo de entrada.

  1. Adicione uma variável de estado que passaremos como suporte ao DescriptionInput:

    initialState() {
      return {
        focusDescriptionInput: false,
      };
    }
  2. Defina um método manipulador que definirá essa variável de estado como true:

    handleTitleInputSubmit() {
      this.setState(focusDescriptionInput: true);
    }
  3. Ao enviar / pressionar enter / next no TitleInput, ligaremos handleTitleInputSubmit. Isso será definido focusDescriptionInputcomo verdadeiro.

    <TextInput 
       style = {styles.titleInput}
       returnKeyType = {"next"}
       autoFocus = {true}
       placeholder = "Title" 
       onSubmitEditing={this.handleTitleInputSubmit}
    />
  4. DescriptionInputO focussuporte de é definido como nossa focusDescriptionInputvariável de estado. Portanto, quando as focusDescriptionInputalterações (na etapa 3) DescriptionInputforem renderizadas novamente com focus={true}.

    <TextInput
       style = {styles.descriptionInput}          
       multiline = {true}
       maxLength = {200}
       placeholder = "Description" 
       focus={this.state.focusDescriptionInput}
    />

É uma boa maneira de evitar o uso de referências, pois as referências podem levar a um código mais frágil :)

EDIT: h / t para @LaneRettig para apontar que você precisará envolver o React Native TextInput com alguns adereços e métodos adicionados para que ele responda focus:

    // Props:
    static propTypes = { 
        focus: PropTypes.bool,
    } 

    static defaultProps = { 
        focus: false,
    } 

    // Methods:
    focus() {
        this._component.focus(); 
    } 

    componentWillReceiveProps(nextProps) {
        const {focus} = nextProps; 

        focus && this.focus(); 
    }
Stedman Blake
fonte
2
@LaneRettig Você está totalmente certo - obrigado por apontar isso. Envolvemos o RN TextInput com alguns adereços e métodos adicionais - consulte a parte inferior da resposta com essas adições e deixe-me saber se você tiver outros problemas!
Stedman Blake 28/02
4
Legal. Você deve enviar isso como um PR para o RN. Estou surpreso que isso ainda não seja suportado imediatamente.
Lane Rettig
8
e se você clicar em próximo no teclado e depois clicar diretamente na primeira entrada? foco volta para a segunda que é má experiência com essa solução
Piotr
3
Eu não amo essa solução, em particular porque ela não se adapta bem a formas ainda um pouco mais longas de 5-6 elementos, onde você precisa de um foco no estado booleano de cada elemento e os gerencia de acordo.
Davidgoli
9
Curiosamente, os documentos também afirmam: "Existem alguns bons casos de uso para refs: gerenciamento de foco, seleção de texto ou reprodução de mídia ..." Portanto, nesse caso, o uso de refs para focar a entrada de texto seria um uso válido da ferramenta .
Noah Allen
26

No React Native 0.36, a chamada focus()(como sugerido em várias outras respostas) em um nó de entrada de texto não é mais suportada. Em vez disso, você pode usar o TextInputStatemódulo do React Native. Criei o seguinte módulo auxiliar para facilitar isso:

// TextInputManager
//
// Provides helper functions for managing the focus state of text
// inputs. This is a hack! You are supposed to be able to call
// "focus()" directly on TextInput nodes, but that doesn't seem
// to be working as of ReactNative 0.36
//
import { findNodeHandle } from 'react-native'
import TextInputState from 'react-native/lib/TextInputState'


export function focusTextInput(node) {
  try {
    TextInputState.focusTextInput(findNodeHandle(node))
  } catch(e) {
    console.log("Couldn't focus text input: ", e.message)
  }
}

Você pode, então, chamar a focusTextInputfunção em qualquer "ref" de a TextInput. Por exemplo:

...
<TextInput onSubmit={() => focusTextInput(this.refs.inputB)} />
<TextInput ref="inputB" />
...
Mitch
fonte
1
Funciona demais, mas se alguém usa redux-form deve fazer algo assim. <Field ... onSubmitEditing={() => focusTextInput(this._password)} />e ref deve ser assim<Field ... withRef refName={e => this._password = e}/>
tarkanlar 28/11
1
Eu tive que usar 'onSubmitEditing' para fazer este trabalho, mas ótima solução, no entanto.
Adam Jakiela
3
Funciona muito bem em 0,42.
Lawrence
1
@tarkanlar, você pode compartilhar um snippet de código para a solução? Eu não consigo concentrar ao usar-forma redux campo, usando apenas TextInput funciona, tudo bem
Jasan
2
calling focus() on a text input node isn't supported any more=> afirmação ousada, fonte? A chamada focus()funciona bem com a v0.49.5 + TextInputStatenão está documentada focus()e blur()é mencionada: facebook.github.io/react-native/releases/next/docs/…
tanguy_k
21

Eu criei uma pequena biblioteca que faz isso, nenhuma alteração de código é necessária, exceto a substituição da exibição de agrupamento e a importação do TextInput:

import { Form, TextInput } from 'react-native-autofocus'

export default () => (
  <Form>
    <TextInput placeholder="test" />
    <TextInput placeholder="test 2" />
  </Form>
)

https://github.com/zackify/react-native-autofocus

Explicado em detalhes aqui: https://zach.codes/autofocus-inputs-in-react-native/

zackify
fonte
Excelente padrão para alcançar este resultado. Deve ser a melhor resposta do ponto de vista da facilidade de uso. Parece que posso editar facilmente meu FormInput personalizado (extensões TextInput) para continuar trabalhando com suas entradas de formulário. Se importa se eu incluí-lo na sua resposta, se para mais um exemplo?
21717 Jack Robson
Certo! Eu sei ... Eu postei isso em outro post popular sobre isso, mas tive problemas com duplicatas. Só estou tentando ajudar porque sei como esse problema é chato !!
Zackify
Isso é ótimo se você tiver um monte de TextInputs logo após o outro, mas se desejar adicionar um estilo entre eles, ele será quebrado. Obrigado pela contribuição.
GenericJam
Sinta-se livre para ajustar o código. Tenho certeza de que você poderia fazer uma maneira de pular elementos que não são entradas de texto. Não deve ser muito difícil de fazer.
Zackify 23/10
1
Isso não cria para produção [email protected]
Phil Andrews
18

Pensei em compartilhar minha solução usando um componente de função ... ' isso ' não é necessário!

React 16.12.0 e React Native 0.61.5

Aqui está um exemplo do meu componente:

import React, { useRef } from 'react'
...


const MyFormComponent = () => {

  const ref_input2 = useRef();
  const ref_input3 = useRef();

  return (
    <>
      <TextInput
        placeholder="Input1"
        autoFocus={true}
        returnKeyType="next"
        onSubmitEditing={() => ref_input2.current.focus()}
      />
      <TextInput
        placeholder="Input2"
        returnKeyType="next"
        onSubmitEditing={() => ref_input3.current.focus()}
        ref={ref_input2}
      />
      <TextInput
        placeholder="Input3"
        ref={ref_input3}
      />
    </>
  )
}

Não sei, espero que isso ajude alguém =)

Eli Johnson
fonte
1
não está funcionando. undefined não é objeto de avaliação _this2.ref_input2.current, por favor ajude
DEEP ADHIYA 20/02
Você pode fornecer um exemplo mais completo do seu código?
Eli Johnson em
2
pode ser melhor usar useRef no componente funcional do que createRef
hyuk lee
@hyuklee Você está realmente correto, senhor, eu atualizei ... obrigado pelo aviso! Felicidades!
Eli Johnson
Para quem gosta de acompanhar as últimas atualizações de reação, esta é A RESPOSTA.
Yokhen 21/04
13

Usando react-native 0.45.1, também encontrei problemas ao tentar definir o foco em uma senha TextInput depois de pressionar a tecla Enter em um nome de usuário TextInput.

Depois de experimentar a maioria das soluções mais conceituadas aqui no SO, encontrei uma solução no github que atendia às minhas necessidades: https://github.com/shoutem/ui/issues/44#issuecomment-290724642

Resumindo:

import React, { Component } from 'react';
import { TextInput as RNTextInput } from 'react-native';

export default class TextInput extends Component {
    render() {
        const { props } = this;

        return (
            <RNTextInput
                {...props}
                ref={(input) => props.inputRef && props.inputRef(input)}
            />
        );
    }
}

E então eu uso assim:

import React, {Component} from 'react';
import {
    View,
} from 'react-native';
import TextInput from "../../components/TextInput";

class Login extends Component {
    constructor(props) {
        super(props);
        this.passTextInput = null
    }

    render() {
        return (
            <View style={{flex:1}}>
                <TextInput
                    style={{flex:1}}
                    placeholder="Username"
                    onSubmitEditing={(event) => {
                        this.passTextInput.focus()
                    }}
                />

                <TextInput
                    style={{flex:1}}
                    placeholder="Password"
                    inputRef={(input) => {
                        this.passTextInput = input
                    }}
                />
            </View>
        )
    }
}
kuhr
fonte
Você salvou minha vida
:)
1
Você meramente renomeado refpara inputRef... Você pode soltar o seu componente personalizado inteira e seu segundo bloco de código irá funcionar como está, enquanto você voltar a usarref
Jason Tolliver
9

Para mim no RN 0.50.3 é possível desta maneira:

<TextInput 
  autoFocus={true} 
  onSubmitEditing={() => {this.PasswordInputRef._root.focus()}} 
/>

<TextInput ref={input => {this.PasswordInputRef = input}} />

Você deve ver this.PasswordInputRef. _root .focus ()

Wishmaster
fonte
1
Isso é específico da 'base nativa'
Developia
8

Se você estiver usando tcomb-form-nativecomo eu sou, também poderá fazer isso. Aqui está o truque: em vez de definir os adereços TextInputdiretamente, você faz isso via options. Você pode consultar os campos do formulário como:

this.refs.form.getComponent('password').refs.input.focus()

Portanto, o produto final é mais ou menos assim:

var t = require('tcomb-form-native');
var Form = t.form.Form;

var MyForm = t.struct({
  field1:     t.String,
  field2:     t.String,
});

var MyComponent = React.createClass({

  _getFormOptions () {
    return {
      fields: {
        field1: {
          returnKeyType: 'next',
          onSubmitEditing: () => {this.refs.form.getComponent('field2').refs.input.focus()},
        },
      },
    };
  },

  render () {

    var formOptions = this._getFormOptions();

    return (
      <View style={styles.container}>
        <Form ref="form" type={MyForm} options={formOptions}/>
      </View>
    );
  },
});

(Agradecemos à remcoanker por postar a idéia aqui: https://github.com/gcanti/tcomb-form-native/issues/96 )

Lane Rettig
fonte
como chamo a função onSubmitEditing? por exemplo: eu quero chamar a função login () quando o usuário pressionar o returnkeytype do último textinput 'pronto'.
Chetan
7

Foi assim que consegui. E o exemplo abaixo usou a API React.createRef () introduzida no React 16.3.

class Test extends React.Component {
  constructor(props) {
    super(props);
    this.secondTextInputRef = React.createRef();
  }

  render() {
    return(
        <View>
            <TextInput
                placeholder = "FirstTextInput"
                returnKeyType="next"
                onSubmitEditing={() => { this.secondTextInputRef.current.focus(); }}
            />
            <TextInput
                ref={this.secondTextInputRef}
                placeholder = "secondTextInput"
            />
        </View>
    );
  }
}

Eu acho que isso vai te ajudar.

Janaka Pushpakumara
fonte
qual é o propósito de .current?
Adam Katz
5

Meu cenário é <CustomBoladonesTextInput /> agrupando um RN <TextInput /> .

Resolvi esse problema da seguinte maneira:

Meu formulário se parece com:

  <CustomBoladonesTextInput 
      onSubmitEditing={() => this.customInput2.refs.innerTextInput2.focus()}
      returnKeyType="next"
      ... />

  <CustomBoladonesTextInput 
       ref={ref => this.customInput2 = ref}
       refInner="innerTextInput2"
       ... />

Na definição do componente CustomBoladonesTextInput, passo o refField para o ref interno prop desta maneira:

   export default class CustomBoladonesTextInput extends React.Component {
      render() {        
         return (< TextInput ref={this.props.refInner} ... />);     
      } 
   }

E pronto. Tudo volta a funcionar novamente. Espero que isto ajude

Rodrigo Tessarollo
fonte
4

Experimente esta solução nos problemas do React Native no GitHub.

https://github.com/facebook/react-native/pull/2149#issuecomment-129262565

Você precisa usar o prop ref para o componente TextInput.
Então você precisa criar uma função que seja chamada no objeto onSubmitEditing que mova o foco na segunda ref de TextInput.

var InputScreen = React.createClass({
    _focusNextField(nextField) {
        this.refs[nextField].focus()
    },

    render: function() {
        return (
            <View style={styles.container}>
                <TextInput
                    ref='1'
                    style={styles.input}
                    placeholder='Normal'
                    returnKeyType='next'
                    blurOnSubmit={false}
                    onSubmitEditing={() => this._focusNextField('2')}
                />
                <TextInput
                    ref='2'
                    style={styles.input}
                    keyboardType='email-address'
                    placeholder='Email Address'
                    returnKeyType='next'
                    blurOnSubmit={false}
                    onSubmitEditing={() => this._focusNextField('3')}
                />
                <TextInput
                    ref='3'
                    style={styles.input}
                    keyboardType='url'
                    placeholder='URL'
                    returnKeyType='next'
                    blurOnSubmit={false}
                    onSubmitEditing={() => this._focusNextField('4')}
                />
                <TextInput
                    ref='4'
                    style={styles.input}
                    keyboardType='numeric'
                    placeholder='Numeric'
                    blurOnSubmit={false}
                    onSubmitEditing={() => this._focusNextField('5')}
                />
                <TextInput
                    ref='5'
                    style={styles.input}
                    keyboardType='numbers-and-punctuation'
                    placeholder='Numbers & Punctuation'
                    returnKeyType='done'
                />
            </View>
        );
    }
});
APAquino
fonte
Inclua as informações relativas do link em sua resposta.
23415 Wes Foster #
Lembre-se de que as refs de string podem ficar obsoletas, portanto essa solução pode não funcionar no futuro: "... Embora as refs de string não sejam obsoletas, elas são consideradas herdadas e provavelmente serão obsoletas em algum momento no futuro. As refs de retorno de chamada são preferido." - facebook.github.io/react/docs/more-about-refs.html
yura
1
Isso não funciona mais, a partir da v0.36. Não há método "foco" no componente. Como devemos fazer isso agora? Você pode atualizar a resposta?
Mitch
@ Não tenho certeza se isso está de volta no 0.39.2, mas isso funciona bem agora.
Eldelshell
4

Usando refs de retorno de chamada em vez da refs de sequência herdada :

<TextInput
    style = {styles.titleInput}
    returnKeyType = {"next"}
    autoFocus = {true}
    placeholder = "Title"
    onSubmitEditing={() => {this.nextInput.focus()}}
/>
<TextInput
    style = {styles.descriptionInput}  
    multiline = {true}
    maxLength = {200}
    placeholder = "Description"
    ref={nextInput => this.nextInput = nextInput}
/>
fagerbua
fonte
1
Não funciona, pois o método de foco foi removido do TextInput.
precisa
3
<TextInput 
    keyboardType="email-address"
    placeholder="Email"
    returnKeyType="next"
    ref="email"
    onSubmitEditing={() => this.focusTextInput(this.refs.password)}
    blurOnSubmit={false}
 />
<TextInput
    ref="password"
    placeholder="Password" 
    secureTextEntry={true} />

E adicione o método onSubmitEditing={() => this.focusTextInput(this.refs.password)}conforme abaixo:

private focusTextInput(node: any) {
    node.focus();
}
Nisar
fonte
2

Para que a solução aceita funcione se você TextInputestiver dentro de outro componente, será necessário "pop" a referência refpara o contêiner pai.

// MyComponent
render() {
    <View>
        <TextInput ref={(r) => this.props.onRef(r)} { ...this.props }/>
    </View>
}

// MyView
render() {
    <MyComponent onSubmitEditing={(evt) => this.myField2.focus()}/>
    <MyComponent onRef={(r) => this.myField2 = r}/>
}
Eldelshell
fonte
1
Olá @Eldelshell, eu gostaria de conseguir a mesma coisa, mas não conseguiu resolver sua amostra. Importa-se de nos mostrar uma dica?
Seeliang
Eu acho que essa deve ser a resposta correta. Eu sigo isso e funciona.
David Cheung
esses dois estão no mesmo arquivo?
MoralCode 16/07/2018
2

no seu componente:

constructor(props) {
        super(props);
        this.focusNextField = this
            .focusNextField
            .bind(this);
        // to store our input refs
        this.inputs = {};
    }
    focusNextField(id) {
        console.log("focus next input: " + id);
        this
            .inputs[id]
            ._root
            .focus();
    }

Nota: Eu usei ._rootporque é uma referência a TextInput na entrada NativeBase'Library '

e em suas entradas de texto como esta

<TextInput
         onSubmitEditing={() => {
                          this.focusNextField('two');
                          }}
         returnKeyType="next"
         blurOnSubmit={false}/>


<TextInput      
         ref={input => {
              this.inputs['two'] = input;
                        }}/>
amorenew
fonte
2
<TextInput placeholder="Nombre"
    ref="1"
    editable={true}
    returnKeyType="next"
    underlineColorAndroid={'#4DB6AC'}
    blurOnSubmit={false}
    value={this.state.First_Name}
    onChangeText={First_Name => this.setState({ First_Name })}
    onSubmitEditing={() => this.focusNextField('2')}
    placeholderTextColor="#797a7a" style={{ marginBottom: 10, color: '#808080', fontSize: 15, width: '100%', }} />

<TextInput placeholder="Apellido"
    ref="2"
    editable={true}
    returnKeyType="next"
    underlineColorAndroid={'#4DB6AC'}
    blurOnSubmit={false}
    value={this.state.Last_Name}
    onChangeText={Last_Name => this.setState({ Last_Name })}
    onSubmitEditing={() => this.focusNextField('3')}
    placeholderTextColor="#797a7a" style={{ marginBottom: 10, color: '#808080', fontSize: 15, width: '100%', }} />

e adicione método

focusNextField(nextField) {
    this.refs[nextField].focus();
}
Saloni Parikh
fonte
Abordagem muito elegante.
Siraj Alam
1
Resposta antiga, mas alguém sabe se é possível acessar todos os árbitros, como nesta resposta, em um componente funcional (sem estado)?
Douglas Schmidt
1

Existe uma maneira de capturar guias em a TextInput. É hacky, mas melhor que nada .

Defina um onChangeTextmanipulador que compare o novo valor de entrada com o antigo, verificando a \t. Se um for encontrado, avance o campo como mostrado por @boredgames

Supondo que a variável usernamecontenha o valor do nome de usuário e setUsernamedespache uma ação para alterá-la na loja (estado do componente, loja redux, etc), faça algo assim:

function tabGuard (newValue, oldValue, callback, nextCallback) {
  if (newValue.indexOf('\t') >= 0 && oldValue.indexOf('\t') === -1) {
    callback(oldValue)
    nextCallback()
  } else {
    callback(newValue)
  }
}

class LoginScene {
  focusNextField = (nextField) => {
    this.refs[nextField].focus()
  }

  focusOnPassword = () => {
    this.focusNextField('password')
  }

  handleUsernameChange = (newValue) => {
    const { username } = this.props            // or from wherever
    const { setUsername } = this.props.actions // or from wherever

    tabGuard(newValue, username, setUsername, this.focusOnPassword)
  }

  render () {
    const { username } = this.props

    return (
      <TextInput ref='username'
                 placeholder='Username'
                 autoCapitalize='none'
                 autoCorrect={false}
                 autoFocus
                 keyboardType='email-address'
                 onChangeText={handleUsernameChange}
                 blurOnSubmit={false}
                 onSubmitEditing={focusOnPassword}
                 value={username} />
    )
  }
}
marius
fonte
Isso não funcionou para mim usando um teclado físico. o evento onChangeText não dispara na guia.
Bufke
0

Aqui, uma solução reagente para um componente de entrada que possui uma propriedade: focus.

O campo será focado desde que esse suporte seja definido como verdadeiro e não terá foco enquanto for falso.

Infelizmente, este componente precisa ter um: ref definido, não consegui encontrar outra maneira de chamar .focus (). Estou feliz com sugestões.

(defn focusable-input [init-attrs]
  (r/create-class
    {:display-name "focusable-input"
     :component-will-receive-props
       (fn [this new-argv]
         (let [ref-c (aget this "refs" (:ref init-attrs))
               focus (:focus (ru/extract-props new-argv))
               is-focused (.isFocused ref-c)]
           (if focus
             (when-not is-focused (.focus ref-c))
             (when is-focused (.blur ref-c)))))
     :reagent-render
       (fn [attrs]
         (let [init-focus (:focus init-attrs)
               auto-focus (or (:auto-focus attrs) init-focus)
               attrs (assoc attrs :auto-focus auto-focus)]
           [input attrs]))}))

https://gist.github.com/Knotschi/6f97efe89681ac149113ddec4c396cc5

Knotschi
fonte
@Bap - este é o Clojurescript. O reagente é uma ligação ao React. Se você estiver curioso, é uma ótima combinação para o React, se você estiver disposto a fazer uma pausa, pois atualizações com estado geralmente são possíveis apenas com coisas como uma chamada explícita para swap!um atomtipo. De acordo com os documentos, isso é usado para vincular ao React: "Qualquer componente que usa um átomo é automaticamente renderizado automaticamente quando seu valor é alterado". reagent-project.github.io
Del
0

Se você estiver usando o NativeBase como componentes da interface do usuário, poderá usar esta amostra

<Item floatingLabel>
    <Label>Title</Label>
    <Input
        returnKeyType = {"next"}
        autoFocus = {true}
        onSubmitEditing={(event) => {
            this._inputDesc._root.focus(); 
        }} />
</Item>
<Item floatingLabel>
    <Label>Description</Label>
    <Input
        getRef={(c) => this._inputDesc = c}
        multiline={true} style={{height: 100}} />
        onSubmitEditing={(event) => { this._inputLink._root.focus(); }} />
</Item>
Mohamed Ben Hartouz
fonte