#javascript #reactjs #react-native
#javascript #reactjs #react-native
Вопрос:
Я новичок в react-native, и у меня есть ввод, в котором я могу выбрать несколько дней недели, если я нажму на день, который уже добавлен, день будет удален из массива selectedDays, однако, когда я нажимаю на день, я получаю следующую ошибку:
TypeError: selectedDays.includes is not a function. (In selectedDays.includes(index 1) selectedDays.includes is undefined
Мой код:
const [ dayOptions, setDayOptions ] = useState([ 'Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo']);
const [ selectedDays, setSelectedDays ] = useState([1]);
const clickedDay = (id)=>
{
const index = selectedDays.indexOf(id);
if (index > -1)
{
setSelectedDays(selectedDays.splice(index, 1));
}
else
{
setSelectedDays(selectedDays.push(id));
}
}
<View style={{ width:'100%',height:45,flexDirection:'row',alignItems:'center',flexWrap:'nowrap', justifyContent:'space-between' }}>
{dayOptions.map((option,index) => {return (
<TouchableOpacity key={option.title} onPress = {() => {clickedDayOptions(index 1) }} style={{ width:'13.2%', height:'100%', flexDirection:'row', alignItems:'center',justifyContent:'center', borderRadius:5,borderWidth:1, borderColor:'rgba(0,0,0,0.2)', ...selectedDays.includes(index 1) ? { backgroundColor: 'rgb(255,52,89)' } : { backgroundColor:'white' }, }}>
<Text style={{ fontWeight:'bold',fontSize:14, ...selectedDays.includes(index 1) ? { color: 'white' } : { color:'rgb(68,68,68)' }, }}>{ option }</Text>
</TouchableOpacity>)
})}
</View>
Я попытался изменить includes для indexOf()> 1 и получаю ту же ошибку, я обычно получаю это, когда это не массив, но я определил selectedDays как массив в хуксах…
Ответ №1:
setSelectedDays(selectedDays.push(id));
Обычно Array.prototype.push
возвращает длину массива после выполнения операции push, поэтому здесь мы делаем Array
number
так, чтобы вы получали indexOf, includes не является ошибкой функции, потому что это числовой тип
Попробуйте, как показано ниже
const clickedDay = (id) => {
const index = selectedDays.indexOf(id);
if (index > -1) {
selectedDays.splice(index, 1)
setSelectedDays([...selectedDays]);
} else {
setSelectedDays([...selectedDays, id]);
}
};
Комментарии:
1. Эй, это сработало! Однако теперь, когда я нажимаю на уже добавленный день, все дни, кроме дня, который я только что нажал, удаляются из массива, у вас есть идеи, почему?
2. да, обновил ответ, если ответ полезен, пожалуйста, примите в качестве ответа 🙂
Ответ №2:
const clickedDay = (id) => {
const index = selectedDays.indexOf(id);
if (index > -1) {
const days = selectedDays.filter((idx) => idx !== id);
setSelectedDays(days);
} else {
setSelectedDays([...selectedDays, id]);
}
};
Комментарии:
1. Пожалуйста, не публикуйте только свой код. Пожалуйста, добавьте некоторое описание в код.