小编Ste*_*hen的帖子

React - 在组件中使用 ref 并将其传递给 props 中的父级

更新:我的问题实际上是由于拼写错误造成的——如果您想在子组件和父组件中使用子元素 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)

是否有另一种方法可以让我在 …

reactjs react-hooks

8
推荐指数
2
解决办法
2万
查看次数

CamanJS - 在应用过滤器/操作后更改底层画布

CamanJS是一个很棒的库,用于在浏览器中进行实时图像处理.

我在预先存在的画布对象上使用Caman.如果用户"返回"到我网站的上一个区域然后再次进入画布,我可能需要更改该画布上的图像.

Caman似乎缓存了它收到的第一个图像数据,然后将画布"锁定"到它的上下文.在应用Caman后尝试更改画布会导致画布没有可见的更改.

我们如何在Caman之外更改画布数据然后重新应用Caman过滤器?

canvas camanjs

6
推荐指数
1
解决办法
2044
查看次数

SpriteKit SKEmitterNode targetNode崩溃EXC_BAD_ACCESS

上下文

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)

exc-bad-access ios sprite-kit arm64 skemitternode

5
推荐指数
1
解决办法
439
查看次数