Réglage de la minuterie pour une longue période de temps, c'est à dire plusieurs minutes
Je veux utiliser firebase auth avec réagissent natif pour Login
et Signup
, mais j'ai eu un jaune d'erreur:
Réglage de la minuterie pour une longue période de temps, c'est à dire plusieurs minutes, les performances et la correction d'un problème sur Android car elle maintient le module timer éveillé, et les minuteries peuvent uniquement être appelée lorsque l'application est au premier plan. Voir (https://github.com/facebook/react-native/issues/12981) pour plus d'info. (Vu setTimeout avec la durée 111862ms)
Comment Puis-Je Régler Ce Problème?
Je ne veux pas ignorer que, je veux comprendre cette erreur et résoudre qu'avec les meilleurs et façon Standard.
Et voici mon Code:
export default class Login extends Component {
constructor(props) {
super(props)
this.state = {
email: '',
password: '',
response: ''
}
this.signUp = this.signUp.bind(this)
this.login = this.login.bind(this)
}
async signUp() {
try {
await firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
this.setState({
response: 'Account Created!'
})
setTimeout(() => {
this.props.navigator.push({
id: 'App'
})
}, 1500)
} catch (error) {
this.setState({
response: error.toString()
})
}
}
async login() {
try {
await firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
this.setState({
response: 'user login in'
})
setTimeout(() => {
this.props.navigator.push({
id: 'App'
})
})
} catch (error) {
this.setState({
response: error.toString()
})
}
}
render() {
return (
<View style={styles.container}>
<View style={styles.containerInputes}>
<TextInput
placeholderTextColor="gray"
placeholder="Email"
style={styles.inputText}
// onChangeText={(email) => this.setState({ email })}
onChangeText={(email) => {console.log(email);}}
/>
<TextInput
placeholderTextColor="gray"
placeholder="Password"
style={styles.inputText}
password={true}
onChangeText={(password) => this.setState({ password })}
/>
</View>
<TouchableHighlight
onPress={this.login}
style={[styles.loginButton, styles.button]}
>
<Text
style={styles.textButton}
>Login</Text>
</TouchableHighlight>
<TouchableHighlight
onPress={this.signUp}
style={[styles.loginButton, styles.button]}
>
<Text
style={styles.textButton}
>Signup</Text>
</TouchableHighlight>
</View>
)
}
}
Je l'ai Signalé à Google Firebase Équipe: (https://github.com/firebase/firebase-js-sdk/issues/97)
Vous devez vous connecter pour publier un commentaire.
Cela résout la boîte jaune et le journal de la console. Même le corrige pour l'Expo.
Il suffit de placer le script suivant au début de votre code.
console.ignoredYellowBox = ['Setting a timer'];
const _console = { ...console };
.Josh Crowther, Ingénieur Logiciel chez Google, a Déclaré:
De l'utilisation de multi-étape courte durée setTimeouts n'a pas corrigé le problème. Le module Timer reste active et l'application est toujours sujet à des problèmes de performance indiqué dans l'avertissement. Le problème ici est que, nous avons des cas d'utilisation qui nécessitent de longues minuteries, et de réagir en natif n'est pas optimiser pour ce cas d'utilisation.
De sorte que le net de tout ce qui est: Ce bogue ne peut pas être fixe, nous ne pouvons que travailler autour de l'erreur de solutions sont disponibles (voir Réglage de la minuterie pour une longue période de temps, c'est à dire plusieurs minutes) que désactiver l'avertissement. Faire le travail pour désactiver l'avertissement dans notre code, n'aide pas la question (au-delà de la désactivation de l'avertissement), et ajoute d'autres SDK code/poids qui est complètement inutile.
Je le recommande carillon sur la question mentionnée ci-dessus (i.e. facebook/réagir indigènes#12981) si vous n'êtes pas à l'aise w/la solution de contournement fournie
J'ai eu le même problème et je pense que c'est le problème de firebase web SDK j'ai donc décidé de déposer firebase web SDK car il s'exécute dans le thread, de ne pas réagir-thread natif.
Et j'ai trouvé réagir-native-firebase . C'est mieux que de firebase web SDK avec des performances supérieures et ce problème s'en alla
Il ignore l'avertissement pour moi. Vous devez ajouter à cela le constructeur de chaque page qui affiche le message d'avertissement.
L'ignorant n'est pas la meilleure approche, mais si vous êtes à l'aide de Firebase en temps réel de la Base de données. Ils sont à la recherche dans la résolution de cette question avec leur bibliothèque, même si la question est de 2 ans.
Dans
login()
, votresetTimeout()
appel est manquant d'une valeur d'intervalle. En général, les navigateurs qui ne se déclenche pas les délais d'attente/intervalles réguliers si la fenêtre/onglet en arrière-plan, ou, au moins, ils ne devraient pas être prises en temps opportun. C'est pour éviter d'abusif script de comportement, et à réduire la consommation d'énergie par des scripts qui peuvent être des bureaux de vote.Votre code devrait fonctionner, en principe, si l'utilisateur passe loin de la fenêtre, tandis que la minuterie est en marche, il sera terminé quand ils reviennent. C'est probablement ce que vous voulez à partir d'un UX point de vue, parce que les utilisateurs voit le passage, plutôt que ce qui se passe en arrière-plan lorsqu'ils ne sont pas à la recherche. Il leur permet de maintenir mentale en contexte.
La boîte jaune est parce que vous êtes la fixation d'un trop long minuterie en fonction du message (près de deux minutes) et qui est peu probable d'être contextuellement ce que vous voulez. La JS environnement est l'avertissement que ce que vous faites n'est pas probable que vous envisagez. Vous pouvez désactiver le message d'avertissement si c'est ce que vous voulez.
Je pense que le plus proche-à l'aide de la solution à ce problème (jusqu'à RN corrigé cela en interne) est la solution mentionnée ici.
Être utilisé que contre Firebase appel que je reçois encore un jaune d'avertissement de boîte (sur settimeout), mais toutes les mises en garde de ne jamais arriver par la suite. Je ne suis pas sûr que l'appel de cette à quel point peut ne pas déclencher le seul avertissement aussi, mais pas n'importe simultanées avertissement lance plus après Firebase est
async
appels.Une autre approche consiste à utiliser l'réagissent-native-ignorer les avertissements de module.
https://github.com/jamrizzi/react-native-ignore-warnings
https://www.npmjs.com/package/react-native-ignore-warnings
Ceci fonctionne même pour l'Expo apps.
Que vous pouvez l'utiliser de la façon suivante . . .
peut fonctionner avec android aussi..?
Pour résoudre ce problème...
Accédez à votre node_modules/react-native/Libraries/Core/Timer/JSTimers.js fichier.
Look pour la variable MAX_TIMER_DURATION_MS
Modifier sa valeur à 10000 * 1000
Enregistrer les modifications (format automatiquement désactivé) et de re-construire votre application.
Trouvé cette réponse sur https://github.com/firebase/firebase-js-sdk/issues/97#issuecomment-485410026
Contourner le problème avec le jaune d'avertissement de Réglage d'une minuterie .
copie & importation de fichier suivants (aussi vite que vous le pouvez ;-))
Face à la même question.. Semble, nous aurions à masquer l'avertissement pour le moment. Voici le chemin le plus court pour le faire:
Dans l'Expo, il n'a travaillé que pour moi avec ce code, que j'ai reçu de CopyJosh réponse dans le Github question:
La clé est de placer le code à l'intérieur de la
App
point d'entréeconstructor
fonction.