我正在构建一个项目概述应用程序,并且正在使用 React-Native-calendar。我还创建了两个按钮来过滤日历。我正在获取数据(API),我正在将数据映射到“markedDates”的对象。一切正常运行。现在每个按钮的 onPress 将对象分配给要过滤的状态。这也有效。不起作用的是那些被标记的日期,肯定是正确的,在应用程序加载时没有显示。但是,当我单击按钮而不是加载时会显示它们。粗略的代码顺序:
const [meineTermine, setMeineTermine] = useState([]);
const [dates, setdates] = useState([]);
const [markedFinal, setMarkedFinal] = useState({});
useEffect(() => {
const unsubscribe = db.collection("Dates").onSnapshot(snapshot => (
setdates(
snapshot.docs.map((doc) => ({
id: doc.id,
data: doc.data(),
})))
))
const filter = db.collection("Dates").where("involv", "==", auth.currentUser.displayName).onSnapshot(snapshot => (
setMeineTermine(
snapshot.docs.map((doc) => ({
id: doc.id,
data: doc.data(),
})))
))
return unsubscribe && filter;
}, [])
let markedDayAll = {};
let markedDayMe = {};
{dates.map(({data: {anfang}}) => (
markedDayAll[anfang] = {
selected: true
}
))}
{meineTermine.map(({data: {anfang}}) => (
markedDayMe[anfang] = {
selected: true
}
))}
<View>
<Button onPress={setMarkedFinal(Object.assign({}, markedDayAll))}/>
<Button onPress={setMarkedFinal(Object.assign({}, markedDayMe))}/>
<CalendarList
markedDates={ markedFinal }
onDayPress={() => navigation.navigate("ViewDate")}
/>
</View>
我试图将数据映射到 useEffect 中不起作用的对象。我还尝试在 state 中设置默认值,但这也不起作用。我错过了什么?我需要按什么顺序设置代码,因为它可以工作,只是没有加载。我需要在哪里实现“setMarkedFinal”以便它在加载时显示?