hunk.code_window: title: Configuring OTA Updates
   ---
   Expo provides various settings to configure how your app receives over-the-air (OTA) JavaScript updates. OTA updates allow you to publish a new version of your app JavaScript and assets without building a new version of your standalone app and re-submitting to app stores ([read more about the limitations](../../workflow/publishing/)).
   To perform an over-the-air update of your app, you simply run `expo publish`. If you're using release channels, specify one with `--release-channel <channel-name>` option. Please note that if you wish to update the SDK version which your app is using, you need to rebuild your app with `expo build:*` command and upload the binary file to the appropriate app store ([see the docs here](../../distribution/building-standalone-apps)).
   OTA updates are controlled by the [`updates` settings in app.json](../../workflow/configuration/#updates), which handle the initial app load, and the [Updates SDK module](../../sdk/updates/), which allows you to fetch updates asynchronously from your JS.
   ## Automatic Updates
  
hunk.labels: keep keep keep keep keep replace keep keep keep keep
hunk.after_edit: To perform an over-the-air update of your app, you simply run `expo publish`. If you're using release channels, specify one with `--release-channel <channel-name>` option. **Please note**- if you wish to update the SDK version of your app, or make [any of the these changes](../../workflow/publishing/#some-native-configuration-cant-be-updated-by), you'll need to rebuild your app with `expo build:*` command and upload the binary file to the appropriate app store ([see the docs here](../../distribution/building-standalone-apps)).
  
hunk.file_path: docs/pages/versions/v33.0.0/guides/configuring-ota-updates.md
hunk.type: replace
file: ---
  id: handling-text-input
  title: Handling Text Input
  ---
  
  [`TextInput`](../textinput/#content) is a basic component that allows the user to enter text. It has an `onChangeText` prop that takes a function to be called every time the text changed, and an `onSubmitEditing` prop that takes a function to be called when the text is submitted.
  
  For example, let's say that as the user types, you're translating their words into a different language. In this new language, every single word is written the same way: 🍕. So the sentence "Hello there Bob" would be translated as "🍕🍕🍕".
  
  ```javascript
  import React, { Component } from 'react';
  import { Text, TextInput, View } from 'react-native';
  
  export default class PizzaTranslator extends Component {
    constructor(props) {
      super(props);
      this.state = { text: '' };
    }
  
    render() {
      return (
        <View style={{ padding: 10 }}>
          <TextInput
            style={{ height: 40 }}
            placeholder="Type here to translate!"
            onChangeText={text => this.setState({ text })}
          />
          <Text style={{ padding: 10, fontSize: 42 }}>
            {this.state.text
              .split(' ')
              .map(word => word && '🍕')
              .join(' ')}
          </Text>
        </View>
      );
    }
  }
  ```
  
  In this example, we store `text` in the state, because it changes over time.
  
  There are a lot more things you might want to do with a text input. For example, you could validate the text inside while the user types. For more detailed examples, see the [React docs on controlled components](https://reactjs.org/docs/forms.html#controlled-components), or the [reference docs for TextInput](../textinput/).
  
  Text input is one of the ways the user interacts with the app. Next, let's look at another type of input and [learn how to handle touches](../handling-touches/).
  