更改样式和属性onTextChange - React Native

时间:2017-11-19 20:13:42

标签: react-native

我刚刚开始使用React Native,我试图找出当两个inputTexts的长度> 1时禁用和启用touchableOpacity的方法。 0

在我的touchableOpacity上,我将它设置为disabled = {true}并且它有一个带有不透明度设置的子文本。当用户输入textInput时,我想设置disabled = {false}并将文本不透明度更改为1.

What's the best way to do this in react native?     
Should i put ref's on them?
Should I use a className? 
setNativeProps maybe?

2 个答案:

答案 0 :(得分:1)

如果您希望不透明度能够根据用户移动而改变,则需要在父组件的状态下设置它(不透明度)。例如,您可以这样做:

export class Parent extends React.Component {
   constructor(props) { 
      super(props);
      this.state = { opacity: 0 }
   }
   render() {
      Some components ....
        <TextInput style={{opacity: this.state.opacity}} onChangeText={ () => this.setState({opacity: 1}) } ...other props here .../>
      Some components ....
   }

}

您还可以将其他样式应用于TextInput组件。

答案 1 :(得分:1)

如果你的构造函数的状态包含&#34; isDisabled&#34;的标志。和&#34; textOpacity&#34;,然后你可以在onChangeText函数中调用setState,它将改变isDisabled和textOpacity的状态。文本组件可以使用状态的textOpacity中的不透明度,touchableOpacity可以使用状态的isDisabled。

例如:

double sum_sin = 0.0, sum_cos = 0.0;
int count = 0;
#pragma omp parallel for reduction(+ : count, sum_sin, sum_cos)
for (std::size_t it = 0; it < box_neighbors[bx[i]].size(); ++it)
{
  const int star_it = box_neighbors[bx[i]][it];
  for (vector<int>::iterator itp = box_particles[star_it].begin();
       itp != box_particles[star_it].end(); ++itp)
  {
    if (dist(x[i], y[i], x[*itp], y[*itp], L) < R0_two)
    {
      sum_sin += sin(theta[*itp]);
      sum_cos += cos(theta[*itp]);
      count += 1;  // number of neighbours of i'th particle
    }
  }
}
sum_sin /= count;
sum_cos /= count;

我没有测试过上面的内容,但我相信这基本上就是你要找的东西。我们对文本更改进行检查以查看是否满足某个条件,并且根据具体情况,我们会按照您的说明更改子组件的参数。调用setState和修改props是触发重新渲染的唯一方法,因此这就是我们使用重新渲染组件的本地反应方式。