just a practice for custom view component