**Do you want to request a *feature* or report a *bug*?**

Bug

**What is the current behavior?**

I've narrowed it down to this:

https://codesandbox.io/s/usetransition-useeffect-dependency-issue-2olmx

Basically, what I *think* is important is:

1. There's a state change resulting in the useEffect being called
2. The useEffect callback starts a transition
3. The transition callback sets state
4. The set state results in a render which suspends

If these are all the case, then including the `startTransition` function in the dependency array will trigger an infinite loop. In the codesandbox I have a safety in place so your browser doesn't fall over.

**What is the expected behavior?**

The `startTransition` function should be consistent between renders.

I've observed that if you do not inline the config to `useTransition` then this is not a problem. I know that the docs recommend keeping this config consistent, but if this is desirable behavior, then maybe a warning about this particular situation in the docs would be useful. I expect that inlining the config will be pretty natural for people.

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**

- react@0.0.0-experimental-f6b8d31a7
- react-dom@0.0.0-experimental-f6b8d31a7
// If that takes more than 5 frames, something probably went wrong.
  for (let i = 0; i < rootStack.length && i < 5; i++) {
    rootIndex = findSharedIndex(hookStack, rootStack, i);
    if (rootIndex !== -1) {
      mostLikelyAncestorIndex = i;
      return rootIndex;
    }
  }
  return -1;
}
function isReactWrapper(functionName, primitiveName) {
  if (!functionName) {
    return false;
  }
  const expectedPrimitiveName = 'use' + primitiveName;
  if (functionName.length < expectedPrimitiveName.length) {
    return false;
  }
  return (
    functionName.lastIndexOf(expectedPrimitiveName) ===
    functionName.length - expectedPrimitiveName.length
  );
}
function findPrimitiveIndex(hookStack, hook) {
  const stackCache = getPrimitiveStackCache();
  const primitiveStack = stackCache.get(hook.primitive);
  if (primitiveStack === undefined) {
    return -1;
  }
  for (let i = 0; i < primitiveStack.length && i < hookStack.length; i++) {