how do react hooks work internally