Javascript 为什么要使用效果don';对依赖性没有反应?
我的react应用程序遇到了难以理解的问题。从API获取数组并将其呈现为表。在呈现之前,数组必须进入两个函数-排序和分页。实际上桌子工作得很好,但有奇怪的行为。排序函数不会对依赖项做出反应,在第一次渲染时我得到空数组,从API获得数组后,此函数必须调用新渲染,但不会发生。 P\S:分页在第一次渲染时工作,仅排序函数有问题 App.jsJavascript 为什么要使用效果don';对依赖性没有反应?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我的react应用程序遇到了难以理解的问题。从API获取数组并将其呈现为表。在呈现之前,数组必须进入两个函数-排序和分页。实际上桌子工作得很好,但有奇怪的行为。排序函数不会对依赖项做出反应,在第一次渲染时我得到空数组,从API获得数组后,此函数必须调用新渲染,但不会发生。 P\S:分页在第一次渲染时工作,仅排序函数有问题 App.js const [items, setItems] = useState([]); const [isLoaded, setIsLoaded] = useS
const [items, setItems] = useState([]);
const [isLoaded, setIsLoaded] = useState(false);
const {setMask, setCurrentColumn, setCurrentCondition, sortedItems} = useSort(items);
const {setCurrentPage, currentItems, amountOfPages} = usePagination(sortedItems);
async function FetchData() {
try {
const response = await fetch('http://localhost:4000/items');
const json = await response.json();
setItems(json);
setIsLoaded(true);
setSortedItems(json);
console.log(json);
} catch (e) {
console.log(e)
}
};
排序函数
const [sortedItems, setSortedItems] = useState([]);
const [mask, setMask] = useState("");
const [currentColumn, setCurrentColumn] = useState("");
const [currentCondition, setCurrentCondition] = useState("");
console.log(items);
useEffect(() => {
SortQuantity(currentCondition, currentColumn);
SortDistance(currentCondition, currentColumn);
SortName(currentCondition, currentColumn);
}, [currentCondition, currentColumn, mask, items]);
function SortQuantity(currentCondition, currentColumn) {
if (currentColumn === "Quantity" && currentCondition === "less") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item => item.Quantity < mask)
)
} else if (currentColumn === "Quantity" && currentCondition === "greater") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item => item.Quantity > mask)
)
} else if (currentColumn === "Quantity" && currentCondition === "equal") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item => item.Quantity.toString() === mask)
)
} else return items
}
function SortDistance(currentCondition, currentColumn) {
if (currentColumn === "Distance" && currentCondition === "less") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item => item.Distance < mask)
)
} else if (currentColumn === "Distance" && currentCondition === "greater") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item => item.Distance > mask)
)
} else if (currentColumn === "Distance" && currentCondition === "equal") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item => item.Distance.toString() === mask)
)
} else return items
}
function SortName(currentCondition, currentColumn) {
if (currentColumn === "Name" && currentCondition === "contains") {
console.log(mask, currentCondition, currentColumn);
setSortedItems(
items.filter(item =>
item.Name.toLowerCase().includes(mask.toLowerCase())
)
)
} else return items
}
return {
setMask,
setCurrentColumn,
setCurrentCondition,
sortedItems
}
};
const[sortedItems,setSortedItems]=useState([]);
const[mask,setMask]=useState(“”);
const[currentColumn,setCurrentColumn]=useState(“”);
const[currentCondition,setCurrentCondition]=useState(“”);
控制台日志(项目);
useffect(()=>{
SortQuantity(当前条件、当前列);
SortInstance(当前条件、当前列);
SortName(当前条件,当前列);
},[currentCondition,currentColumn,mask,items]);
函数SortQuantity(currentCondition,currentColumn){
如果(currentColumn==“数量”&¤tCondition==“更少”){
日志(掩码、当前条件、当前列);
集合分类(
items.filter(item=>item.Quantityitem.Quantity>mask)
)
}else if(currentColumn==“数量”&¤tCondition==“相等”){
日志(掩码、当前条件、当前列);
集合分类(
items.filter(item=>item.Quantity.toString()==掩码)
)
}其他退货项目
}
函数排序状态(当前条件、当前列){
如果(currentColumn==“距离”&¤tCondition==“更少”){
日志(掩码、当前条件、当前列);
集合分类(
items.filter(item=>item.Distanceitem.Distance>mask)
)
}else if(currentColumn==“距离”&¤tCondition==“相等”){
日志(掩码、当前条件、当前列);
集合分类(
items.filter(item=>item.Distance.toString()==掩码)
)
}其他退货项目
}
函数SortName(currentCondition,currentColumn){
如果(currentColumn==“Name”&¤tCondition==“contains”){
日志(掩码、当前条件、当前列);
集合分类(
items.filter(item=>
item.Name.toLowerCase().includes(mask.toLowerCase())
)
)
}其他退货项目
}
返回{
设置掩码,
setCurrentColumn,
设置当前条件,
分类数据
}
};
我用第一次渲染解决了问题,但这不是问题的答案。我添加了setSortedItems以获取
App.js
const [items, setItems] = useState([]);
const [isLoaded, setIsLoaded] = useState(false);
const {setMask, setCurrentColumn, setCurrentCondition, sortedItems} = useSort(items);
const {setCurrentPage, currentItems, amountOfPages} = usePagination(sortedItems);
async function FetchData() {
try {
const response = await fetch('http://localhost:4000/items');
const json = await response.json();
setItems(json);
setIsLoaded(true);
setSortedItems(json);
console.log(json);
} catch (e) {
console.log(e)
}
};