Support projection
Support reactive way `onValue`