Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

Sorry, you do not have permission to ask a question, You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please type your username.

Please type your E-Mail.

Please choose an appropriate title for the post.

Please choose the appropriate section so your post can be easily searched.

Please choose suitable Keywords Ex: post, video.

Browse

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 6715

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Latest Questions

Author
  • 60k
Author
Asked: November 27, 20242024-11-27T09:06:08+00:00 2024-11-27T09:06:08+00:00

How Would you make this React code with dynamic filtering more optimized

  • 60k

I was given a task of optimizing our dashboards performance this week. And to be honest I wasn't really sure what is it means by optimization. On googling I found that one way to optimize is reducing unnecessary re-render and aviding unnecessary API calls.

so I set the my goals like this:

  • To have Fewer Render hence better performance (possibly by introducing useRef instead of useState if possible)

  • Eliminating Unnecessary API calls (when applying the same filter or when clicking reset again and again shouldn't trigger an API call)

  • Right way to use useReducer and check for anti-patterns in my
    custom hook

And I came up with the minimal, workable example and here is the working demo

I was only half successful in acheiving my optimization:

  • Once I apply filter and then apply it again it doesn't call the mock api
  • Once I change resultLimit to same value it doesn't call api Here is how I did it
    const [page,setPage] = useState(1)//current page filter     const [resultLimit,setResultLimit] = useState(10) //result limit filter,currently not implemented     const [totalCount,setTotalCount] = useState(0) // total result count filter     const [filters,setFilters] =useState<IFilterBugData>({         platform:[],         rootCause: [],         reportedBy: [],         assignedTo: [],         status: [],         defectCategory: [],         severity: [],         priority: [],     })//filter options      const [bugsData,setBugsData] = useState<IBug[]>([]) //bugs result      const handleFilterDispatch = (state:IKeyValue[],payload:IFilterPayload) => {         let _temp = [...state]         switch(payload.action){             case 'add':                 return _temp             case 'reset':                 return []             default:                 return _temp         }     }// use reducer for handling function temp filter state      // const filterState = useRef<IKeyValue[]>([])     const [filterState,filterDispatch] = useReducer(handleFilterDispatch,[])//temp filter state     const [finalFilterState,setFinalFiterState] = useState<IKeyValue[]>([])//input filter state 
Enter fullscreen mode Exit fullscreen mode

    const memoizedInput:IInputBugData = useMemo(() => {         return {             filters:finalFilterState,             page,             resultLimit         }     },[finalFilterState,page,resultLimit])      const getBugsData = useCallback(() =>   {         console.log('inside memoized callback',memoizedInput)          return getBugs(memoizedInput)     }, [memoizedInput]) 
Enter fullscreen mode Exit fullscreen mode

and calling the memoized function getBugsData in useEffect although I have doubt that memoizedInput is not necessary here

    useEffect(() => {         console.log('rendering dataaaaaa')         let {resultCount,currentPage,bugs,filters} = getBugsData()         setBugsData(bugs)         setFilters({...filters})         setPage(currentPage)         setTotalCount(resultCount)     },[getBugsData]) 
Enter fullscreen mode Exit fullscreen mode

But What it failed to do is

  • It stills call api when I deselect and select the same option resulting in same filterstate
  • clicking reset always calls api (even if there is no filter applied)
  • even if I haven't changed my filters when I click apply it re-renders (only once)

so my question is how would you guys do it differently.

Note: you guys can also point out the anti-patterns I have done, as I am not sure if I am doing custom hooks or useReducer/useCallback/useMemo the correct way

performancereacttypescriptwebdev
  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 4k
  • Answers 0
  • Best Answers 0
  • Users 1k
  • Popular
  • Answers
  • Author

    How to ensure that all the routes on my Symfony ...

    • 0 Answers
  • Author

    Insights into Forms in Flask

    • 0 Answers
  • Author

    Kick Start Your Next Project With Holo Theme

    • 0 Answers

Top Members

Samantha Carter

Samantha Carter

  • 0 Questions
  • 20 Points
Begginer
Ella Lewis

Ella Lewis

  • 0 Questions
  • 20 Points
Begginer
Isaac Anderson

Isaac Anderson

  • 0 Questions
  • 20 Points
Begginer

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore, ask, and connect. Join our vibrant Q&A community today!

About Us

  • About Us
  • Contact Us
  • All Users

Legal Stuff

  • Terms of Use
  • Privacy Policy
  • Cookie Policy

Help

  • Knowledge Base
  • Support

Follow

© 2022 Querify Question. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.