Giter VIP home page Giter VIP logo

react-hooks-redux-crud-lab's Introduction

Create and Delete Lab

Learning Goals

  • Create a complex application using React and Redux

Introduction

In this lab, we will practice creating and removing various items using Redux. We are working with two different resources, restaurants and reviews, with each restaurant having many reviews and reviews belonging to a restaurant. You will implement components to connect each resource to your Redux store.

Instructions

Restaurants

Start off by working on the restaurantsSlice and create these actions:

  • restaurantAdded: should take a string of the restaurant name, and add a new restaurant to the array of entities in state. The restaurant should have a name and id, generated using the uuid package.
  • restaurantRemoved: should take the restaurant ID as the payload, and remove the restaurant from the array of entities in state.

For your components, start off by working on the components for displaying restaurants. First, you'll need a RestaurantInput component that allows a user to create new restaurants. Your form should have two inputs: a text input to enter the name of the restaurant with a label of "Name", and an input with type equal submit and the text of "Add Restaurant".

Next, you will build out the RestaurantsContainer component that will connect to Redux and pass the appropriate props down to its children. You will then want to create a Restaurants component that renders a list of restaurants, and a Restaurant component that is responsible for each individual restaurant.

Users should also be able to delete restaurants, so you will need to wire up the button rendered in the Restaurant component with the text of "Delete Restaurant".

Reviews

Next you will work on the reviews resource. Since you'll need to be able to associate reviews to restaurants, and delete specific reviews, reviews stored in Redux should have a comment key for the review content, a restaurantId key to associate and display the review with a specific restaurant and an id key unique to the review itself.

Start off by working on the reviewsSlice and create these actions:

  • reviewAdded: should take a string of the review comment and the restaurantId, and add a new review to the array of entities in state. The review should have a comment, restaurantId, and id, generated using the uuid package.
  • reviewRemoved: should take the review ID as the payload, and remove the review from the array of entities in state.

Once you've created your reviewsSlice, export and use its reducer in the ./src/store.js file.

Note: Although each review belongs to a specific restaurant, that relationship should be implemented using the restaurantId key, not in the structure of the store's state. In order to get the tests passing, the state will need to be structured as follows:

{
  restaurants: { entities: [] },
  reviews: { entities: [] }
}

Next, work on the components. You will make a ReviewInput component that will enable users to create a review that is associated with a specific restaurant. The form should have a <textarea> for the content of the review with a label of "Comment", along with an input of type submit and the text of "Add Review".

Next you will build out the ReviewsContainer, Reviews, and Review components. The ReviewsContainer should be nested within the Restaurant component so reviews are displayed underneath the restaurant they belong to. Users should also be able to delete a specific review using a button with the text of "Delete Review".

Conclusion

Once all tests are passing, you'll be able to create and delete restaurants and their specific reviews.

Bonus: Implement edit functionality for restaurants and reviews. You will probably want to include an additional button with each restaurant and review that, when clicked, will open an input where a user could modify the contents of a specific item. You will then need to dispatch an update action to the reducer to update the store.

react-hooks-redux-crud-lab's People

Contributors

dependabot[bot] avatar ihollander avatar jeffkatzy avatar lizbur10 avatar lukeghenco avatar maxwellbenton avatar nikymorg avatar rrcobb avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-hooks-redux-crud-lab's Issues

Tests Fail Because They're Expecting a Different Code Pattern

Canvas Link

https://learning.flatironschool.com/courses/4324/assignments/127799?module_item_id=264404

Concern

I've completed this lab and the app is functioning as described in the Readme, but I still have 2 failing tests. One of the tests is related to code that was pre-written in the repo (Restaurant.js).

I believe the tests are failing because they're expecting a different code pattern than what the ReadMe is instructing you to do.

For example, the test for the Restaurant component renders the following code:

<Provider store={store}>
  <Restaurant restaurant={restaurant2} />
</Provider>

and then looks to see whether the restaurant is able to be deleted. It throws a TypeError, saying that handleDeleteRestaurant is not a function.

In the pre-written code, they were passing the action creator function down as a prop from RestaurantsContainer --> Restaurants --> Restaurant. So the Restaurant component, as written in the test file, doesn't have access to the action creator.

This also happened with the "Delete Review" test in Review.test.js.

Additional Context

No response

Suggested Changes

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.