更新:我的问题实际上是由于拼写错误造成的——如果您想在子组件和父组件中使用子元素 ref,一般方法可以正常工作。
这是有效方法的一个工作示例:https : //codesandbox.io/s/rwj7z7o7oo
原帖:
我正在尝试将 ref 转发给父组件,同时还使子组件(这是一个类)中的函数可以访问该 ref。目前,我可以成功地将 ref 传递给父级,但在子级中无法再访问该 ref。
class Child extends React.Component {
// Unable to access the forwarded ref here:
componentDidMount() {
console.log(this.props.forwardedRef); // null
}
render() {
return <input type="text" ref={this.props.forwardedRef} />
}
}
// Parent is able to access the ref:
const Parent = () => {
const childRef = useRef(null);
function handleClick() {
console.log(childRef.current); // correctly ref's the input el
}
return (
<Child forwardedRef={childRef} onClick={handleClick} />
);
}
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法可以让我在 …
CamanJS是一个很棒的库,用于在浏览器中进行实时图像处理.
我在预先存在的画布对象上使用Caman.如果用户"返回"到我网站的上一个区域然后再次进入画布,我可能需要更改该画布上的图像.
Caman似乎缓存了它收到的第一个图像数据,然后将画布"锁定"到它的上下文.在应用Caman后尝试更改画布会导致画布没有可见的更改.
我们如何在Caman之外更改画布数据然后重新应用Caman过滤器?
上下文
An SKEmitterNode是从sks文件创建的,并作为某个精灵的子项添加.该targetNode发射器被设置在现场的一些其他节点.
func launch() {
let emitterPath = NSBundle.mainBundle().pathForResource(
"trailblaze", ofType: "sks"
)!
let emitter = NSKeyedUnarchiver.unarchiveObjectWithFile(emitterPath) as SKEmitterNode
emitter.targetNode = (sprite.scene as GameScene).canvas
sprite.addChild(emitter)
}
Run Code Online (Sandbox Code Playgroud)
碰撞
崩溃只发生在64位设备上,这是一个日志:
* thread #1: tid = 0xd3127, 0x000000018a6d1194 SpriteKit`std::__1::__tree_iterator<SKCSprite*, std::__1::__tree_node<SKCSprite*, void*>*, long> std::__1::__tree<SKCSprite*, std::__1::less<SKCSprite*>, std::__1::allocator<SKCSprite*> >::find<SKCSprite*>(SKCSprite* const&) + 16, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xbaddae9f5299becd)
frame #0: 0x000000018a6d1194 SpriteKit`std::__1::__tree_iterator<SKCSprite*, std::__1::__tree_node<SKCSprite*, void*>*, long> std::__1::__tree<SKCSprite*, std::__1::less<SKCSprite*>, std::__1::allocator<SKCSprite*> >::find<SKCSprite*>(SKCSprite* const&) + 16
frame #1: 0x000000018a6d1150 SpriteKit`unsigned long …Run Code Online (Sandbox Code Playgroud)