首页 文章

Apollo Client 2.1中的变异错误处理

提问于
浏览
0

新的Apollo Client 2.1使用渲染道具模式而不是HoC模式,因此它改变了查询和变异的处理方式 .

我已经开始使用它,但我不确定一些基本的东西 . 一个是错误处理 . 我有一个自定义的“AuthResponse”组件,我想传递成功或错误响应 . 如果这是一个错误(或成功),我正在使用React的本地组件状态将错误传递给我的AuthResponse组件,但我不确定这是否是最好的方法?

<View style={styles.homeContainer}>
            // this is where I want to pass the error to. Currently uses React component state but I'm not sure if this is the best way?
            <AuthResponse
                authResponse={(this.state && this.state.authResponse) || null}
            />
            <Mutation
                mutation={registerMutation}
                update={(cache, { data: { registerUser } }) => {
                    // user has been registered
                }}
                onError={error => {
                    // is this the right place to start passing errors to other components?
                    this.setState({
                        authResponse: error
                    });
                }}
            >
                {(registerUser, { data, error }) => (
                    <View>
                        <Formik
                            onSubmit={(
                                values,
                                { setSubmitting, setErrors /* setValues and other goodies */ }
                            ) => {
                                registerUser({ variables: { ...values } });
                            }}
                            render={({
                                handleSubmit
                            }) => (
                                <View>
                                    <Button
                                        onPress={handleSubmit}
                                    />
                                </View>
                            )}
                        />
                    </View>
                )}
            </Mutation>
            <Text onPress={this.goToLogin}>Login</Text>
        </View>

我在这里假设Mutation组件应该尽可能小 - 即不包裹整个页面,因为屏幕上的不同区域可能需要来自Query或Mutation组件的不同数据 .

我确实考虑使用Apollo Client中的Query组件包装AuthResponse组件,从本地缓存中查询数据,我将手动更新 . 这似乎是一个更好的解决方案,但在文档中没有关于如何在页面/屏幕周围传播多个Query / Mutation组件的内容 .

谢谢

1 回答

  • 0

    Imho你应该使用第二个位置(渲染函数中的 error 参数),如果你需要访问底层反应组件,即formik(使用'setErrors'或'setFieldError')

    您可以将 onError prop用于其他情况,例如使用'setState'或运行其他功能 .

    我知道你不能同时使用两者:如果添加 onError prop,你将不会在渲染功能中出错 .

相关问题