{"id":21473741,"url":"https://github.com/bell-kevin/usereducerclickcounter","last_synced_at":"2026-04-18T01:02:00.487Z","repository":{"id":235735278,"uuid":"614626245","full_name":"bell-kevin/useReducerClickCounter","owner":"bell-kevin","description":"use the useReducer hook for a single piece of state, a counter, to convert the React project in the Introduction video to a React Native project","archived":false,"fork":false,"pushed_at":"2026-03-26T00:28:21.000Z","size":990,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-26T22:36:14.302Z","etag":null,"topics":["android","ios","react-native","usereducer","usereducer-hook"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bell-kevin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-16T01:19:22.000Z","updated_at":"2026-03-26T00:28:16.000Z","dependencies_parsed_at":"2024-04-24T13:21:45.489Z","dependency_job_id":"a04018a3-d495-4ff5-87ac-0ee859dfed62","html_url":"https://github.com/bell-kevin/useReducerClickCounter","commit_stats":null,"previous_names":["bell-kevin/usereducerclickcounter"],"tags_count":0,"template":false,"template_full_name":"bell-kevin/kevinBellTemplateRepo","purl":"pkg:github/bell-kevin/useReducerClickCounter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bell-kevin%2FuseReducerClickCounter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bell-kevin%2FuseReducerClickCounter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bell-kevin%2FuseReducerClickCounter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bell-kevin%2FuseReducerClickCounter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bell-kevin","download_url":"https://codeload.github.com/bell-kevin/useReducerClickCounter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bell-kevin%2FuseReducerClickCounter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31952206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"ssl_error","status_checked_at":"2026-04-18T00:39:20.671Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","ios","react-native","usereducer","usereducer-hook"],"created_at":"2024-11-23T10:18:42.149Z","updated_at":"2026-04-18T01:02:00.427Z","avatar_url":"https://github.com/bell-kevin.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Click Counter with useReducer Hook from React Native\n\nBefore you start this project, make sure you have gone through the Introduction to UseReducer page (https://inv.nadeko.net/watch?v=kK_Wqx3RnHk). You will create a project similar to the one in that introduction.\n\nThe useReducer hook is very helpful for exposing the state of multiple pieces of data, or where the state is determined with dependencies on other pieces of state. That complexity makes it hard to find a project that practices the concept fully. In this project, you will use the useReducer hook for a single piece of state, a counter, to convert the React project in the Introduction video to a React Native project.\n\nIf you were on a shopping site, ordering an item, you need to specify the quantity of that item you want to purchase. That uses a click counter, where one button adds to the count and another button decreases that amount. In this project, you will use 3 buttons, one to increment, one to decrement, and one to reset the counter. The results look like this:\n\n![clickReducer.PNG](https://github.com/bell-kevin/useReducerClickCounter/blob/main/clickReducer.PNG)\n\nThe background cannot be white; the 3 buttons must each have a different color -- the colors are your choice, make sure the text is clearly visible (no black text on dark blue background, for example). The number displays the current count.\n\nUse the useReducer hook with action \"type\" for the 3 buttons, and \"dispatch\" for the onPress event of the buttons to send that action type to the reducer. Use the payload parameter in the dispatch, and use that payload value in the switch statement that changes the state of the counter. No payload is needed for the reset button.\n\nTake a screenshot of the screen after pressing the Add button a few times (as above). Take another screenshot after pressing the Remove button so that there is a negative number. \n\n \n\nSubmission: Zip together the root folder and the 2 screenshots, and submit the single zipped folder.\n\n![p](https://github.com/bell-kevin/useReducerClickCounter/blob/main/screenshots/1.PNG)\n\n![p](https://github.com/bell-kevin/useReducerClickCounter/blob/main/screenshots/2.PNG)\n\n## How to:\n\nCreate one app. for both Android and iOS (Apple) using one computer alorithm for both apps. You'll need Visual Studio Code and Android Studio to get started:\n\nhttps://code.visualstudio.com/download\n\nhttps://developer.android.com/studio\n\nIf you want to see how your app. will look on iOS (Apple) devices, you'll need Xcode from the Apple app. store:\n\nhttps://developer.apple.com/xcode/\n\nTo run the Xcode app, you'll need a fairly new Apple computer.\n\nhttps://reactnative.dev/docs/environment-setup\n\nhttps://reactnative.dev/docs/components-and-apis\n\nhttps://reactnative.dev/docs/intro-react\n\nCheck out App.js here in the code files for the computer algorithm code.\n\n## Storing Projects\n\nWhen you complete a React Native project, you should keep it on your storage device for a little while. There are multiple instances where one project will be the basis of another project. The Udemy course keeps building on the projects, so you definitely need to keep those around until you are done with that project in the course.\n\nBUT -- React Native projects are huge. There is a folder, node_modules, that takes up most of the space. If you keep every project you create in this course, you would need at least 20GB of space, probably more. How can you manage this terrible drain on your storage?\n\nThat node_modules folder is automatically added when you create a new project. Once you are done with the project, you can delete that folder, node_modules, and the size of your project will shrink dramatically.\n\nThis does not destroy the project. If you find you need to run an old project again, which no longer has its node_modules folder, open it in Visual Studio Code, open a terminal, and type \"npm install\". This will load the node_modules folder again, and the project is whole and ready to run.\n\nNote that when you delete that folder, it takes a noticeable amount of time, far more than it takes to reload it.\n\nA good practice for course maintenance is to keep the project in its full state until you are sure you won't be using it in the next few days, then delete the node_modules folder.\n\n== We're Using GitHub Under Protest ==\n\nThis project is currently hosted on GitHub.  This is not ideal; GitHub is a\nproprietary, trade-secret system that is not Free and Open Souce Software\n(FOSS).  We are deeply concerned about using a proprietary system like GitHub\nto develop our FOSS project. I have a [website](https://bellKevin.me) where the\nproject contributors are actively discussing how we can move away from GitHub\nin the long term.  We urge you to read about the [Give up GitHub](https://GiveUpGitHub.org) campaign \nfrom [the Software Freedom Conservancy](https://sfconservancy.org) to understand some of the reasons why GitHub is not \na good place to host FOSS projects.\n\nIf you are a contributor who personally has already quit using GitHub, please\nemail me at **bellKevin@pm.me** for how to send us contributions without\nusing GitHub directly.\n\nAny use of this project's code by GitHub Copilot, past or present, is done\nwithout our permission.  We do not consent to GitHub's use of this project's\ncode in Copilot.\n\n![Logo of the GiveUpGitHub campaign](https://sfconservancy.org/img/GiveUpGitHub.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbell-kevin%2Fusereducerclickcounter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbell-kevin%2Fusereducerclickcounter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbell-kevin%2Fusereducerclickcounter/lists"}