【问题标题】:How set function on react-navigation navigationOptions?react-navigation navigationOptions 如何设置功能?
【发布时间】:2019-08-13 00:26:14
【问题描述】:

在导航选项上设置一个简单的文本输入后,我想有条件地呈现一个清除按钮。

static navigationOptions = ({ navigation }) => {
    const q = navigation.getParam("q", "");
    const onSearch = navigation.getParam("onSearch");
    const onFocus = navigation.getParam("onFocus");

    return {
      headerStyle: {
        backgroundColor: "#fff"
      },
      header: (
        <View style={styles.searchContainer}>
          <HeaderBackButton
            tintColor="black"
            onPress={() => navigation.navigate("Home")}
          />
          <TextInput
            underlineColorAndroid="transparent"
            style={styles.inputContainer}
            placeholder="Search"
            value={q}
            onChangeText={text => onSearch(text)}
            onFocus={onFocus}
            //clearButtonMode="always"
          />
          {this.renderClearButton()}
        </View>
      )
    };
  };

所以这里是函数

 renderClearButton() {
    if (this.state.onSearchStatus == "touched") {
      return (
        <TouchableOpacity onPress={navigation.getParam("clearText")}>
          <Image
            style={styles.button}
            source={require("../assets/icons/clear.png")}
          />
        </TouchableOpacity>
      );
    } else {
      return "";
    }
  }

但是会发生这种情况

TypeError: undefined is not a function (评估 '_this2.renderClearButton()')

我已经尝试过:

const renderClearButton = navigation.getParam("renderClearButton");
and {renderClearButton}

但是

现在的错误是函数作为反应子无效。这可能 如果你返回一个组件,就会发生这种情况

那么可以给navigationOptions添加一个函数吗?

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    navigationOption 中,你无权访问this 上下文,你不能在navigationOption 中调用你的方法。

    所以现在,要动态更改标题内容,

    您可以将一个导航参数从上一屏幕传递到当前屏幕,例如 onSearchStatus

    使用三元运算符在navigationOption 本身中动态显示您的内容,

    {navigation.state.params.onSearchStatus == "touched" && navigation.state.params.onSearchStatus != undefined  ?
        ....//your touchableopacity code
    : null}
    

    现在使用setParams()从导航更改内容动态设置参数,

    对于more detail

    【讨论】:

    • Jaydeep 感谢您的帮助,但在放置 {navigation.state.params.onSearchStatus == "touched" 之后?并且 setParams() 显示:TypeError: undefined is not an object (evalating 'navigation.state.params.onSearchStatus')
    • 关于组件生命周期 componentDidMount() { this.props.navigation.setParams({ onSearch: this.onSearch, onFocus: this.onFocus, clearText: this._clearText, onSearchStatus: this.onSearchStatus }); }
    • Jaydeep,感谢您的帮助,但错误仍然存​​在。可能是因为 searchScreen 上的静态 navigationOptions 而不是路由器上的?
    • Jaydeep 好的,之前添加了navigation.state.params &&,停止了未定义的问题,但也没有返回按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多