Hone logo
Hone
Problems

Reactive Map Component in Vue with TypeScript

This challenge focuses on building a Vue component that displays and manages a map using a reactive Map data structure. Reactive Maps are useful when you need to store key-value pairs and automatically update the UI whenever the map's contents change, offering a more efficient alternative to arrays for certain data management scenarios. Your task is to create a component that allows adding, deleting, and viewing entries in this reactive map.

Problem Description

You need to create a Vue component named ReactiveMapComponent that utilizes a reactive Map to store and display data. The component should provide the following functionalities:

  • Initialization: The component should initialize with an empty Map.
  • Adding Entries: A form allowing users to input a key (string) and a value (string) to add to the map. Upon submission, the map should be updated, and the UI should reflect the change.
  • Deleting Entries: A way to delete entries from the map based on their key. Provide an input field for the key to delete and a button to trigger the deletion. The UI should update accordingly.
  • Displaying Entries: A clear and organized display of the map's contents. Each key-value pair should be shown in a readable format.
  • Reactivity: The UI should automatically update whenever the map is modified (entries added or deleted).

Expected Behavior:

  1. When the component loads, it should display an empty map.
  2. Adding a new key-value pair should immediately update the displayed map.
  3. Deleting a key-value pair should immediately update the displayed map.
  4. The component should handle invalid input gracefully (e.g., empty keys).

Edge Cases to Consider:

  • What happens if the user tries to delete a key that doesn't exist in the map? (Should not throw an error, simply do nothing).
  • How should the component handle empty input for the key or value fields? (Provide appropriate validation or feedback).
  • Consider how to efficiently display a large number of entries in the map. (While not a primary focus, think about potential performance implications).

Examples

Example 1:

Input: Initial Map: {}
User adds key: "name", value: "Alice"
User adds key: "age", value: "30"
Output:
Map:
- name: Alice
- age: 30

Explanation: The map is initialized as empty. Two entries are added, and the UI displays them.

Example 2:

Input: Map: { name: "Alice", age: "30", city: "New York" }
User enters key to delete: "age" and clicks delete.
Output:
Map:
- name: Alice
- city: New York

Explanation: The "age" entry is removed from the map, and the UI updates to reflect the change.

Example 3:

Input: Map: { product: "Laptop", price: "1200" }
User enters key to delete: "country" and clicks delete.
Output:
Map:
- product: Laptop
- price: 1200

Explanation: Attempting to delete a non-existent key ("country") has no effect on the map.

Constraints

  • The component must be written in Vue 3 with TypeScript.
  • The map must be a reactive Map object.
  • The UI must be responsive and clearly display the map's contents.
  • The component should be reasonably performant, even with a moderate number of entries (up to 50).
  • Input validation should be implemented to prevent errors caused by invalid input.

Notes

  • Consider using Vue's reactivity system (ref or reactive) to ensure the map is reactive.
  • Think about how to structure your component's template to effectively display the map's contents.
  • You can use any Vue UI library or styling techniques you prefer.
  • Focus on creating a clean, well-structured, and maintainable component.
  • Error handling and user feedback are important aspects of a good user experience.
Loading editor...
typescript