Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要使用效果don';对依赖性没有反应?_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 为什么要使用效果don';对依赖性没有反应?

Javascript 为什么要使用效果don';对依赖性没有反应?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我的react应用程序遇到了难以理解的问题。从API获取数组并将其呈现为表。在呈现之前,数组必须进入两个函数-排序和分页。实际上桌子工作得很好,但有奇怪的行为。排序函数不会对依赖项做出反应,在第一次渲染时我得到空数组,从API获得数组后,此函数必须调用新渲染,但不会发生。 P\S:分页在第一次渲染时工作,仅排序函数有问题 App.js const [items, setItems] = useState([]); const [isLoaded, setIsLoaded] = useS

我的react应用程序遇到了难以理解的问题。从API获取数组并将其呈现为表。在呈现之前,数组必须进入两个函数-排序和分页。实际上桌子工作得很好,但有奇怪的行为。排序函数不会对依赖项做出反应,在第一次渲染时我得到空数组,从API获得数组后,此函数必须调用新渲染,但不会发生。 P\S:分页在第一次渲染时工作,仅排序函数有问题

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)
            }
        };
排序函数

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)
            }
        };