• Jobs
  • About Us
  • Jobs
    • Home
    • Jobs
    • Courses and challenges
  • Businesses
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

251
Views
El campo de texto React Native no se borra

Estoy desarrollando una aplicación de mensajería usando react-native y socket.io . cuando envío el mensaje, el mensaje se entrega correctamente, pero el texto en el campo de texto no se borra y aparece el mensaje de error Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s, the componentWillUnmount method .

 import React from 'react'; import { View, StyleSheet, Text, FlatList, TextInput } from 'react-native'; import { Button } from 'react-native-paper'; import { io } from 'socket.io-client'; import colors from '../config/colors'; class Messages extends React.Component { constructor(props) { super(props); this.state = { chats: [], message: '', }; } componentDidMount() { const socket = io('http://localhost:1000'); socket.on('chat', (chats) => { this.setState({ chats: [...this.state.chats, chats] }); }); } render() { return ( <View style={styles.container}> <FlatList data={this.state.chats} renderItem={({ item }) => <Text>{item.message}</Text>} keyExtractor={(item) => item.id.toString()} /> <View style={styles.inputContainer}> <TextInput style={styles.input} onChangeText={(text) => { this.setState({ message: text }); }} /> <Button onPress={() => { const socket = io('http://localhost:1000'); socket.emit('chat', { message: this.state.message, }); this.setState({ message: '' }); }} > Send </Button> </View> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.black, }, input: { backgroundColor: colors.text, //color: colors.text, height: 40, flex: 1, borderRadius: 20, }, inputContainer: { flexDirection: 'row', justifyContent: 'space-between', }, }); export default Messages;
about 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Pruebe la palabra clave async con componentDidMount

 async componentDidMount() { //existing code }

y al definir los estados, se recomienda usar null en lugar de ""

 this.state = { chats: [], message: null, };

por lo tanto, de manera similar, configúrelo como nulo después de que se haya enviado el mensaje

this.setState({ message: null })

incluso use funciones en lugar de multilínea en el disparador de botón

 sendMessage = async() => { const socket = io('http://localhost:1000'); socket.emit('chat', { message: this.state.message, }); this.setState({ message: null }); } <Button onPress={this.sendMessage}> Send </Button>
about 3 years ago · Santiago Trujillo Report

0

El enlace de datos en React se puede lograr mediante el uso de una entrada controlada. Se logra una entrada controlada vinculando el valor a una variable de estado y un evento onChange para cambiar el estado a medida que cambia el valor de entrada. debe agregar un value={this.state.message} a su componente de texto para lograr los resultados deseados.

 <TextInput value={this.state.message} style={styles.input} onChangeText={(text) => { this.setState({ message: text }); }} />
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Show me some job opportunities
There's an error!