在 React Native 中处理空用户名



我的应用程序中有一个评论部分,它使用用户的用户名作为标题以及他们的评论。除非用户尚未设置用户名,否则一切正常。我正在尝试创建一个条件,如果用户没有设置用户名,它将是匿名的。

我正在使用 Redux 添加评论。

这是我的代码,我将操作与用户名、uid 和评论一起调度给操作创建者:

const review = this.props.review.review;
//const username = this.props.userData.username.username;
const uid = this.props.string.uid;
const username = () => {
if (!this.props.userData.username.username) {
return 'Anonymous';
}
return this.props.userData.username.username;
};
//dispatch action with my values
this.props.submitUserReview({ review, username, uid });

我感谢对此问题的任何帮助和指导。干杯!

解决:

我通过使用lodash解决了这个问题,这要归功于Noah Allen:

const username = _.get(userData, 'username.username', 'Anonymous'(

编辑:洛达什单行:

const username = _.get(userData, 'username.username', 'Anonymous')

要修复您的示例,您实际上只需要添加一对括号(解释如下(:

this.props.submitUserReview({ review, username: username(), uid });

更进一步,您应该这样做以帮助提高代码的可读性、重用和抽象:

function checkUsername (userData) {
// Checks for undefined, null, and a string with no characters:
if (userData && userData.username && userData.username.username && username.length > 0) {
return userData.username.username
}
// Default case:
return 'Anonymous'
}

然后在组件中:

this.props.submitUserReview({ review, username: checkUsername(this.props.userData), uid })

基本上,您将函数用户名传递给提交,而不是运行函数并将函数的结果传递给提交。在此示例中,您将在其他地方定义检查用户名函数以帮助进行抽象。然后在提交中运行函数并将其结果传递给submitUserReview函数。

请注意,在 JS 中,当你有一个函数:const x = () => 1时,x 的类型将是一个函数。一旦使用括号,就会调用该函数:x(),并返回值。因此,在您的原始示例中,您将x作为参数传递 - 这意味着它从未被计算过,并且您将函数传递到您的商店中。您需要从中获取值并将其传递给 redux。

在将函数绑定到组件时,了解这一点也很好。例如:<Button onPress={this.doSomething()} />.在这种情况下,函数doSomething将在加载按钮时进行评估,当您在点击按钮时确实想对其进行评估时,如下所示:Button onPress={this.doSomething} />.在这种情况下,onPress 会评估函数,因此您无需自己操作。

解决问题的另一种方法是在呈现用户名的组件中:

<Text>{review.username ? review.username : 'Anonymous'}</Text>

如果用户名存在于审阅对象中(或者它在您的组件中看起来如何(,则有条件地显示用户名,否则显示匿名。如果您需要判断评论是否真的在其他地方有用户名,这可能会有所帮助。

你不需要为这个小东西创建功能。你可以用下面的方式写它:

this.props.submitUserReview({ review, username: (this.props.userData.username.username || "Anonymous"), uid });

在这里,如果this.props.userData.username.username的值是假的,即空或未定义的或空字符串,那么它将Anonymous作为参数传递。因此,它将解决您的用例。

相关内容

  • 没有找到相关文章

最新更新