Context API & Reduxa few seconds ago
Common bad performance practice is a belief that state management library can be replaced with usage of custom implementation that is based on React Context. It may be handy at the beginning because it reduces boilerplate code that state manage libraries introduce. But using this mechanism without proper memoization will lead to huge performance drawbacks. You will probably end up refactoring state management to redux, because it will turn out that is easier that implementation of custom selectors mechanism to you current solution.