Giter VIP home page Giter VIP logo

Comments (3)

RubyLouvre avatar RubyLouvre commented on July 21, 2024
           var container = document.getElementById("example")
           var div = container
            var PropTypes = React.PropTypes
            if(!window.ReactDOM){
              window.ReactDOM = React
            }
            var expect = function(a) {
                return {
                    toBe: function(b) {
                        console.log(a,"vs", b, a === b)
                    },
                    toEqual(b){
                        console.log(a,"vs", b, a +""=== b+"")
                    },
                    toThrow(b){
                        try{
                            a()
                        }catch(e){
                            console.log(e,"vs", b, e.message +""=== b+"")
                        }
                    }
                }
            }

            function dispatchEventOnNode(node, type) {
                node.dispatchEvent(new Event(type, {bubbles: true, cancelable: true}));
            }
            function emptyFunction(){
                console.log("empty")
            }
            var setUntrackedValue = Object.getOwnPropertyDescriptor(
                HTMLInputElement.prototype,
                'value',
            ).set;
          
           var stub = (
                <select multiple={true} defaultValue={["giraffe", "gorilla"]}>
                    <option value="monkey">A monkey!</option>
                    <option value="giraffe">A giraffe!</option>
                    <option value="gorilla">A gorilla!</option>
                </select>
            );
            var options = stub.props.children;
            stub = ReactDOM.render(stub, container);
            var node = ReactDOM.findDOMNode(stub);
    
            expect(node.options[0].selected).toBe(false); // monkey
            expect(node.options[1].selected).toBe(true); // giraffe
            expect(node.options[2].selected).toBe(true); // gorilla

             // Changing `defaultValue` should do nothing.
        ReactDOM.render(
            <select multiple={true} defaultValue={["monkey"]}>
                {options}
            </select>,
            container
        );

        expect(node.options[0].selected).toBe(false); // monkey
        expect(node.options[1].selected).toBe(true); // giraffe
        expect(node.options[2].selected).toBe(true); // gorilla
       console.log("第二个测试")
       var container = document.createElement("div")
        document.body.appendChild(container)
        var stub = (
            <select defaultValue={"yyy"}>
                <option value="xxx">xxx</option>
                <option value="yyy">yyy</option>
                <option value="zzz">zzz</option>
            </select>
        );
        var options = stub.props.children;
        stub = ReactDOM.render(stub, container);
        var node = ReactDOM.findDOMNode(stub);

        expect(node.options[0].selected).toBe(false); // monkey
        expect(node.options[1].selected).toBe(true); // giraffe
        expect(node.options[2].selected).toBe(false); // gorilla

        // Changing `defaultValue` should do nothing.
        ReactDOM.render(
        <select defaultValue={"zzz"}>
            {options}
        </select>,
        container
        );

        expect(node.options[0].selected).toBe(false); // monkey
        expect(node.options[1].selected).toBe(true); // giraffe
        expect(node.options[2].selected).toBe(false); // gorilla
        console.log("第三个测试")

        var container = document.createElement("div")
        document.body.appendChild(container)
        var stub = (
            <select defaultValue="giraffe">
                <option value="monkey">A monkey!</option>
                <option value="giraffe">A giraffe!</option>
                <option value="gorilla">A gorilla!</option>
            </select>
        );
        var options = stub.props.children;
        stub = ReactDOM.render(stub, container);
        var node = ReactDOM.findDOMNode(stub);

        expect(node.value).toBe("giraffe");

        // Changing `defaultValue` should do nothing.
        ReactDOM.render(<select defaultValue="gorilla">{options}</select>, container);
        expect(node.value).toEqual("giraffe");

        console.log("第四个测试")

        var container = document.createElement("div")
        document.body.appendChild(container)
        var el = (
            <select defaultValue="giraffe">
                <option value="monkey">A monkey!</option>
                <option value="giraffe">A giraffe!</option>
                <option value="gorilla">A gorilla!</option>
            </select>
        );
        var stub = ReactDOM.render(el, container);
        var node = ReactDOM.findDOMNode(stub);

        expect(node.value).toBe("giraffe");

        node.value = "monkey";
        ReactDOM.render(el, container);
        // Uncontrolled selects shouldn't change the value after first mounting
        expect(node.value).toEqual("monkey");

from anu.

RubyLouvre avatar RubyLouvre commented on July 21, 2024

光标处理的例子

                 class Input extends React.Component {
                    state = {value: 'first'};
                    render() {
                      return (
                        <input
                          onChange={e => this.setState({value: e.target.value})}
                          value={this.state.value}
                        />
                      );
                    }
                    update(){
                        this.setState({value:"first11"})
                    }
                  }
            
                var a = ReactDOM.render(<Input />, container);
                var dom = ReactDOM.findDOMNode(a)
                console.log("设置光标")
                dom.focus()
                dom.selectionStart = 3
                dom.selectionEnd = 3

                setTimeout(function(){
                    console.log("更新内容会影响光标但不会让光标消失")
                    a.update()
                },3000)
            

from anu.

RubyLouvre avatar RubyLouvre commented on July 21, 2024
var breakNode = {
    form: 1,
    body: 1
};
function syncOtherRadios(dom, v) {
    var queryRoot = dom;
    while (queryRoot.parentNode) {
        if (breakNode[queryRoot.nodeName.toLowerCase()]) {
            break;
        }
        queryRoot = queryRoot.parentNode;
    }
    var inputs = queryRoot ? queryRoot.getElementsByTagName("input") : [];
    for (var i = 0, el; (el = inputs[i++]); ) {
        if (el !== dom && el.type === dom.type && el.name === dom.name && el.form === dom.form) {
            if (el.checked !== !v) {
                el.checked = !v;
            }
        }
    }
}

function keepPersistValue(e) {
    var dom = e.target;
    var name = e.type === "textarea" ? "innerHTML" : /check|radio/.test(dom.type) ? "checked" : "value";
    var v = dom._persistValue;
    if (dom.type === "radio") {
        syncOtherRadios(dom, v);
    }
    var noNull = v != null;
    var noEqual = dom[name] !== v; //2.0 , 2
    if (noNull && noEqual) {
        dom[name] = v;
    }
}

from anu.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.