#javascript #react-native
Вопрос:
В приведенной ниже собственной функции React мы хотим остановить инициализацию случайного массива при каждом нажатии кнопки. В настоящее время, когда мы нажимаем кнопку, счетчик увеличивается, а массив снова инициализируется. Любая помощь была бы очень признательна.
import React, { useState } from "react";
import { Button, Text, View } from "react-native";
const Game1 = (props) => {
const [count, setCount] = useState(0);
handlePress = () => {
// if (selectedNoArry == 0) {
setCount(count 1);
// selectedNoArry.concat(index);
// console.log(selectedNoArry);
// }
//return false;
};
const randomNoArry = Array.from(
{length: props.randomnno},
x => 1 Math.floor(10 * Math.random()),
);
return (
<View>
<Text style={{marginTop: 40}}>
you hit {count}!
</Text>
<Text style={{marginTop: 40}}>
this is randomn {randomNoArry}!
</Text>
<Button style={{marginTop: '40'}}
onPress={() => handlePress()}
title="click Me"
/>
</View>
);
}
const Game = () => {
return (
<>
<Game1 randomnno="6" />
</>
);
}
export default Game;
Чтобы проверить, пожалуйста, скопируйте и вставьте приведенный выше код здесь
Комментарии:
1. Вы можете использовать крючок useMemo для запоминания
randomNoArry
переменной.const randomNoArry = useMemo(() => Array.from({ length: props.randomnno }, (x) => 1 Math.floor(10 * Math.random())),[props.randomnno]);
Ответ №1:
Вы можете поместить данные в useRef()
или useState()
предотвратить их автоматическое восстановление.
import React, { useState } from "react";
import { Button, Text, View } from "react-native";
const genRanArr = (length) =>
Array.from({ length: length }, (x) => 1 Math.floor(10 * Math.random()));
const Game1 = (props) => {
const [count, setCount] = useState(0);
const [randomArray, setRandomArray] = useState(genRanArr(props.name));
const handlePress = () => {
setCount(count 1);
};
return (
<View>
<Text style={{ marginTop: 40 }}>you hit {count}!</Text>
<Text style={{ marginTop: 40 }}>this a randomn {randomArray}!</Text>
<Button
style={{ marginTop: "40" }}
onPress={() => handlePress()}
title="click Me"
/>
</View>
);
};
const Game = () => {
return (
<>
<Game1 name="6" />
</>
);
};
export default Game;
Комментарии:
1. Большое спасибо, работает хорошо. Я не знал, что компонент перерисовывается при использовании состояния.