怎么控制style的方法完成react的搜索功能
高洛峰
高洛峰 2016-10-27 17:04:00
[JavaScript讨论组]
//Card.js


import React from 'react'
import ReactDOM from 'react-dom'
import Select from './Select.js'
import Value from './Value.js'
class Card extends React.Component {
  render () {
    let styles={
        all:{boxShadow: "rgba(0, 0, 0, 0.156863) 3px 3px 10px, rgba(0, 0, 0, 0.227451) 0px    3px 10px",
        width:"100%",
        height:"90px",
        maxWidth:"790px",
        margin:"0 auto",
        marginBottom:"10px"
      },
      left:{
        height:"90px",
        background:"#1976D2",
        width:"12%",
        float:"left",
        lineHeight:"90px",
        textAlign:"center",
        fontSize:"1.8em"
      },
      right:{
        padding:"10px 0 0 20px",
        float:"left",
        height:"90px",
        width:"88%"
      }
    };
    var baiRbai=[]
        baiRbai= Value.map((item,i) => {
        return(
          <div style={styles.all} key={i}>
            <a href={i+"/index.html"}>
            <div style={styles.left}>{i}</div>
            <div style={styles.right}>
              <h3 style={{marginBottom:"8px"}}>{item.title}</h3>
              <date>{item.date}</date>
            </div>
            </a>
          </div>
        )
    });
    return (
      <div>
        {baiRbai}
      </div>
    )
  }
}
export default Card;


//Select.js

import React, { PropTypes } from 'react'
import Card from './Card.js'
import Value from './Value.js'
import $ from 'jquery'
class Select extends React.Component {
  constructor() {
    super();
    this.state={
      showIndex:null,
      zhuangtai:false
    }

  }
  select(){
    let text=$(this.refs.text).val();
    let item=[];
    for (var i = 0; i < Value.length; i++) {
      let pat=RegExp(text);
      if (pat.test(Value[i].title)) {
        item.push(i);
      }
    }
    if (item.length>0) {
      this.setState({
        showIndex:item,
        zhuangtai:true
      });
    }
  }
  render () {
    return(
      <div>
        <input type="text" ref="text"/>
        <button onClick={this.select.bind(this)}>搜索</button>
        <Card showIndex={this.state.showIndex} zhuangtai={this.state.zhuangtai}/>
      </div>
    )
  }
}
export default Select;


//index.html

import React from 'react'
import ReactDOM from 'react-dom'
import Select from './Select.js'
import './main.css'
ReactDOM.render(<div>
  <Select />
</div>, document.getElementById('app'));

1.png

点击搜索就可以只显示能匹配到title的卡片,最好是可以用style的display:block或display:none来判断哪些显示哪些不显示,我只会用符合条件的,我给他重新构造出来这种笨方法,今天学了生命周期我以为可以试下但逻辑能力还是不行代码挺多但真的希望可以帮我解决一下

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
三叔

有些设计概念问题,上层下层的关系都乱了套了。Card是指一列列的资料是吧?Select是左边那个搜寻列是吧?

你把Card组件(元件)嵌套在Select组件(元件)中,Select组件(元件)作为上层,就不该在Card组件中作Value的map逻辑,而是在Select里作。比较佳的建议是提升一个上层元件,Select与Card都在其中。

其次,你在Select中的select这个方法是要搜寻用的,是个事件方法,理应要传入event参数值,由此判断事件的传入值,而不是用$(this.refs.text).val()来取值,这区块就不太正确。

参考一下,重写过再来问。


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号