Module RCTEventEmitter is not a registered callable module (calling receiveTouches)

You need to import React like this: import React from 'react'.

Your code snippet had a few other issues relating to scope.

Here is a working snippet:

import React, { Component } from "react";
import { StyleSheet, Text, View, TextInput, Animated } from "react-native";

import fetchWeather from "./app/api/api";
import weatherIcon from "./app/utils/icons";

function randomColor() {
  const colors = [0, 1, 2].map(() => Math.ceil(Math.random() * 255));
  return "rgba(" + colors.join(",") + ",0.6)";
}

export default class WeatherAppNative extends Component {
  state = {
    city: "Bucuresti",
    country: "Romania",
    weatherType: "Clear",
    temperature: 21,
    searchedCity: "Bucuresti",
    val: new Animated.Value(0),
    currentColor: "rgba(255,255,255,0.5)",
    nextColor: randomColor(),
    icon: weatherIcon()
  };

  getWeather = async () => {
    const { nextColor, searchedCity, val } = this.state;
    const response = await fetchWeather(searchedCity);

    let weatherList = response.list[0];

    // Store nextColor, since we'd like to start next time with it.
    var current = nextColor;

    // Reset animation
    val.setValue(0);

    this.setState({
      temperature: weatherList.main.temp,
      city: weatherList.name,
      country: weatherList.sys.country,
      weatherType: weatherList.weather[0].main,
      currentColor: current,
      nextColor: randomColor(),
      icon: weatherIcon(weatherList.weather[0].icon)
    });
  };

  render() {
    const backgroundColor = this.state.val.interpolate({
      inputRange: [0, 1],
      outputRange: [this.state.currentColor, this.state.nextColor]
    });

    // Start the animation
    Animated.spring(this.state.val, {
      tension: 1,
      friction: 20,
      toValue: 1
    }).start();

    return (
      <Animated.View
        style={{
          backgroundColor,
          flex: 1,
          alignItems: "stretch",
          justifyContent: "center"
        }}
      >
        <View style={{ marginBottom: this.state.keyboardSpace }}>
          <View style={[styles.animatedContainer]}>
            <Text style={styles.icon}>{this.state.icon}</Text>
            <Text style={styles.temperature}>
              {Math.round(this.state.temperature) + "°C"}
            </Text>
            <Text style={styles.location}>
              {this.state.city}, {this.state.country}
            </Text>
            <Text style={styles.weatherType}>{this.state.weatherType}</Text>
            <TextInput
              style={styles.input}
              onChangeText={this.onChangeText}
              onSubmitEditing={this.getWeather}
              clearButtonMode={"always"}
              clearTextOnFocus={true}
              enablesReturnKeyAutomatically={true}
              returnKeyType={"search"}
            />
          </View>
        </View>
      </Animated.View>
    );
  }

  onChangeText = searchedCity =>
    this.setState({
      searchedCity: searchedCity
    });
}

const styles = StyleSheet.create({
  animatedContainer: {
    alignItems: "center",
    justifyContent: "center"
  },
  temperature: {
    fontSize: 62,
    fontWeight: "100",
    margin: 0
  },
  location: {
    fontSize: 14,
    fontWeight: "100",
    marginBottom: 20
  },
  weatherType: {
    fontSize: 34,
    fontWeight: "500"
  },
  input: {
    borderWidth: 1,
    borderColor: "#666",
    height: 40,
    marginVertical: 20,
    marginHorizontal: 20,
    paddingHorizontal: 10,
    borderRadius: 5
  },
  icon: {
    fontFamily: "WeatherIcons-Regular",
    fontSize: 130,
    padding: 0
  }
});