Reactjs React useEffect如何使用单个操作运行一个或多个函数

Reactjs React useEffect如何使用单个操作运行一个或多个函数,reactjs,react-native,react-redux,Reactjs,React Native,React Redux,Сan任何人都可以帮我解决这个问题已经一周了 我的应用程序仅在以下情况下工作:(3步) 我按下按钮(按钮、复选框、单选)更改listYear、listMonth和listBranch(来自其他组件) 然后我需要按按钮1设置FilteryDate(listYear)设置FiltermDate(listMonth)和设置FilterBranch(listBranch) 然后我需要按按钮2来执行函数过滤器,它需要从按钮1接收所有数据 我想要的是:(仅1步) 当我按下按钮更改listYear、listM

Сan任何人都可以帮我解决这个问题已经一周了

我的应用程序仅在以下情况下工作:(3步)

我按下按钮(按钮、复选框、单选)更改listYear、listMonth和listBranch(来自其他组件)

然后我需要按按钮1设置FilteryDate(listYear)设置FiltermDate(listMonth)和设置FilterBranch(listBranch)

然后我需要按按钮2来执行函数过滤器,它需要从按钮1接收所有数据

我想要的是:(仅1步)

当我按下按钮更改listYear、listMonth和listBranch时,我不需要再次按下按钮1和2,它将自动启动

function content() {
    const dispatch = useDispatch()
    let listYear = useSelector (state=>state.cardReducer.listYear)
    let listMonth= useSelector (state=>state.cardReducer.listMonth)
    let listBranch= useSelector (state=>state.cardReducer.listBranch)
    let originalData = useSelector(state=>state.cardReducer.originalData)

    const[meter,setMeter]=useState([])
    const[tableRow,setTableRow]=useState([])
    const[tableRow1,setTableRow1]=useState([])
    const[filterYDate,setFilterYDate]=useState([listYear])
    const[filterMDate,setFilterMDate]=useState([listMonth])
    const[filterBranch,setFilterBranch]=useState([listBranch])

    useEffect(()=>{
        dispatch(getApi())
    },[])

    function filtered() {
        *this function will change tableRow & tableRow1*
    }

    function onButton1() {
        *this function will change all data required in function filtered*
        setFilterYDate([listYear])
        setFilterMDate(listMonth)
        setFilterBranch(listBranch)
    }

    function onButton2() {
        *this function run the filtered()*
        filtered()
    }

}

谢谢,很抱歉我的英语不好。

当listYear、listMonth或listBranch中的任何一个发生更改时,您都可以运行效果:

const filtered = useCallback(() => {
  //if statement checking listYear,listMonth,listBranch
  //dispatch action
}, [listBranch, listMonth, listYear]);
useEffect(() => filtered(), [filtered]);
如果filtered未分派操作,但设置了本地状态,则可以使用回调来防止循环依赖:

const [someState, setSomeState] = useState([]);
const filtered = useCallback(
  () =>
    setSomeState((someState) => {
      //if statement checking listYear,listMonth,listBranch
      //return someState.filter
      //or return someState
    }),
  [listBranch, listMonth, listYear]
);
useEffect(() => filtered(), [filtered]);

但是,如果过滤数据是本地过滤版本的originalData,那么您应该使用选择器,我建议使用

当listYear、listMonth或listBranch中的任何一个发生更改时,您可以运行一个效果:

const filtered = useCallback(() => {
  //if statement checking listYear,listMonth,listBranch
  //dispatch action
}, [listBranch, listMonth, listYear]);
useEffect(() => filtered(), [filtered]);
如果filtered未分派操作,但设置了本地状态,则可以使用回调来防止循环依赖:

const [someState, setSomeState] = useState([]);
const filtered = useCallback(
  () =>
    setSomeState((someState) => {
      //if statement checking listYear,listMonth,listBranch
      //return someState.filter
      //or return someState
    }),
  [listBranch, listMonth, listYear]
);
useEffect(() => filtered(), [filtered]);

但是,如果过滤数据是原始数据的本地过滤版本,那么您应该使用选择器,我建议使用

谢谢,这可能是我一直在寻找的答案,谢谢,这可能是我一直在寻找的答案