-
Notifications
You must be signed in to change notification settings - Fork 153
Should the default for empty properties be null? #228
Description
I have a custom mesh component, something like:
class MyMesh extends Component {
const { position, } = this.props;
render() {
return <mesh position={ position }>...</mesh>
}
}Most (but not all) of my meshes go through this class. I wanted to try forcing a manual render order, so I added the renderOrder prop and passed it down:
class MyMesh extends Component {
const { position, renderOrder, } = this.props;
render() {
return <mesh position={ position } renderOrder={ renderOrder }>...</mesh>
}
}I started getting some strange flickering in my scene, and tracked it down to an undefined behavior in threejs.
Here's how three.js sorts by renderOrder: https://github.com/mrdoob/three.js/blob/dev/src/renderers/webgl/WebGLRenderLists.js#L7
Since three doesn't check for truthiness, it will sort only on equality difference. Normally, a mesh's render order is undefined. By simply adding the renderOrder={...} prop to my <mesh>, now anything using my component, even if doesn't pass renderOrder, will get null instead of the "default" undefined, which means my scene objects start sorting unexpectedly.
Should the default property be undefined, not null ? https://github.com/toxicFork/react-three-renderer/blob/master/src/lib/descriptors/THREEElementDescriptor.js#L40